2017-12-18 17 views
0

윈도우의 Top 및 Left 속성에 대한 값을 바인딩하고 싶습니다. valueconverter 및 valueconverter 매개 변수를 사용해야합니다 (정확하게 말하면 : 내 창에 datacontext가 필요합니다). unfortunatelly 내 값 변환기가 발견되지 않았다는 오류가 발생합니다.창 속성에 값 변환기를 사용할 수 있습니까?

<Window x:Class="Proofing_Tool.wwwww" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:Proofing_Tool" 
     xmlns:conv="clr-namespace:Proofing_Tool.ValueConverters" 
     mc:Ignorable="d" 
     Height="180" 
     MinHeight="50" 
     Width="340" 
     SizeToContent="Height" 
     AllowsTransparency="True" 
     WindowStyle="None" 
     Background="{x:Null}"  
     OpacityMask="White" 
     Name="AnomalyWindow" 
     Title="Anomaly Details" 
     ResizeMode="NoResize" 
     Left="{Binding ., Converter={StaticResource ValueConverterAnomalyToLeft},ConverterParameter={x:Reference Name=AnomalyWindow}}" 
     Top="{Binding ., Converter={StaticResource ValueConverterAnomalyToTop},ConverterParameter={x:Reference Name=AnomalyWindow}}"> 
    <Window.Resources> 
     <conv:ValueConverterAnomalyToLeft x:Key="ValueConverterAnomalyToLeft" /> 
     <conv:ValueConverterAnomalyToTop x:Key="ValueConverterAnomalyToTop" /> 
</Window.Resources> 

편집, 부분 아래 값을 업데이트하는 문제는 잘 작동 : 뒤에

   <TextBlock Grid.Column="1" Text="{Binding Ano.Name, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"/> 

코드 :

public Anomaly Ano 
{ 
    get { return _ano; } 
    set 
    { 
     _ano = value; 
     NotifyPropertyChanged(); 
    } 
} 
public event PropertyChangedEventHandler PropertyChanged; 
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
{ 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
} 

한 번만 업데이트됩니다

+2

리소스 선언을 App.xaml의 Application.Resources로 이동합니다. Window의 DataContext를 변환기에 전달하려면 MultiBinding 중 하나가 ''인 MultiValueConverter와 함께 MultiBinding을 사용하십시오. – Clemens

+0

Unfortunatelly, App.xaml 안에 선언을 넣을 수 없으므로 WPF 컨트롤을 VSTO/Winforms 응용 프로그램에 호스팅하고 있습니다. – buks

답변

1

... unfortunatelly 내 값 변환기를 찾을 수 없다는 오류가 발생합니다. 자원이 LeftTop 속성이 설정되어 후 을 생성하기 때문이다

.

당신은 자원이 생성 된 후 속성에 바인딩 요소 구문을 사용하여이 문제를 해결할 수 있습니다

<Window x:Class="Proofing_Tool.wwwww" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:Proofing_Tool" 
    xmlns:conv="clr-namespace:Proofing_Tool.ValueConverters" 
    mc:Ignorable="d" 
    Height="180" 
    MinHeight="50" 
    Width="340" 
    SizeToContent="Height" 
    AllowsTransparency="True" 
    WindowStyle="None" 
    Background="{x:Null}"  
    OpacityMask="White" 
    Name="AnomalyWindow" 
    Title="Anomaly Details" 
    ResizeMode="NoResize"> 
    <Window.Resources> 
     <conv:ValueConverterAnomalyToLeft x:Key="ValueConverterAnomalyToLeft" /> 
     <conv:ValueConverterAnomalyToTop x:Key="ValueConverterAnomalyToTop" /> 
    </Window.Resources> 
    <Window.Left> 
     <Binding Path="." Converter="{StaticResource ValueConverterAnomalyToLeft}" ConverterParameter="{x:Reference Name=AnomalyWindow}" /> 
    </Window.Left> 
    <Window.Top> 
     <Binding Path="." Converter="{StaticResource ValueConverterAnomalyToTop}" ConverterParameter="{x:Reference Name=AnomalyWindow}" /> 
    </Window.Top> 
</Window> 

주문 사항을. 다른 옵션은 @Clements가 제안한대로 App.xaml의 자원을 정의하는 것입니다.

+0

감사합니다. 부분적으로 (AnomalyWindow에 대한 참조를 제거해야했습니다.) 값을 업데이트하는 데 문제가 있습니다. 값을 한 번만 업데이트합니다. Path = "."대신 "."을 사용하는 대신 Path = "Ano"를 사용하고 있습니다. 그것은 잘 작동하지 않았다. 다른 한편으로 나는 그 속성에 값을 바인딩했고 Ano 값이 변경 될 때마다 textblock의 값을 업데이트했습니다. 나는이 코드를 루트 게시물에 추가 할 것이다. – buks

+1

바인딩의 Mode 속성을 TwoWay로 설정하고 데이터 바인딩 된 원본 속성에 대해 PropertyChanged 이벤트를 발생 시키려고 했습니까? – mm8

+0

필자는 이전의 TwoWay 모드를 설정하지 않았습니다. 적어도 이론적으로는 필요하지 않았기 때문에 한쪽 모드가 동일한 속성에 바인딩 된 다른 컨트롤에서 잘 작동했기 때문입니다. 하지만 이상한 이유로 TwoWay 모드가 잘 작동하고 값이 매번 업데이트됩니다. 고맙습니다. – buks

1

http://www.thejoyofcode.com/WPF_Quick_Tip_Converters_as_MarkupExtensions.aspx

해당 게시물의 V3 섹션을 보면, 당신은 당신이 이런 식으로 원하는 것을 할 수 있도록 이것에 대한 좋은 간단한 우아한 해결책 발견 :

Top="{Binding ., Converter={local:MyTopConverter}, ConverterParameter={x:Reference Name=AnomalyWindow}}" 

없음을 내부에서 그것을 정의 할 필요가있다.