2015-11-05 2 views
0

У меня есть пользовательские привязки, как это:Как установить значение с помощью xaml только в привязке WPF?

public class MyBinding : Binding 
{ 
    public class ValueConverter : IValueConverter 
    { 
     public ValueConverter(string A) 
     { 
      this.A = A; 
     } 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if ((bool)value == true) 
      { 
       return A; 
      } 
      else 
      { 
       return "another value"; 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
     public string A 
     { 
      get; 
      set; 
     } 

    } 

    public string A 
    { 
     get; 
     set; 
    } 

    public MyBinding() 
    { 
     this.Converter = new ValueConverter(A); 
    } 
} 

и XAML (IsEnable является свойством класса MainWindow):

<Window x:Class="WpfApplication5.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication5" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <TextBlock> 
     <TextBlock.Text> 
      <local:MyBinding A="value" Path="IsEnable" RelativeSource="{RelativeSource AncestorType=Window, Mode=FindAncestor}"/> 
     </TextBlock.Text> 
    </TextBlock> 
</Grid> 

Я готов сделать TextBlock шоу A когда IsEnable является истинным и показывает another value, когда IsEnable является ложным.

Но что бы я ни делал, я не могу установить значение A в xaml. Это всегда должно быть null, когда я отлаживаю.

Я сделал что-то не так?

+0

У вас есть опечатка. Его 'IsEnabled', а не' IsEnable'. Обратите внимание на окончательный «d». –

+0

Спасибо за подсказку. – Dragon

ответ

1

Значению свойства A присвоен после был вызван конструктор MyBinding.

Вы можете создать конвертер в сеттер A:

public class MyBinding : Binding 
{ 
    ... 

    private string a; 
    public string A 
    { 
     get { return a; } 
     set 
     { 
      a = value; 
      Converter = new ValueConverter(a); 
     } 
    } 
} 
+0

Спасибо. Я знаю, как это работает. – Dragon

Смежные вопросы