在WPF DataTrigger值中绑定

嗯,这可能是一个简单的问题,但我无法找到解决方案。

我有一个DataTrigger

  

现在我想将Value绑定到变量myVariable 。 因此,如果myVariable的值发生更改, myVariableValue属性也会更改。

我试过设置Binding,但我想它不可能设置它。 有没有其他方法可以动态设置此值。

编辑:我尝试创建自己的数据触发器。 但我仍然无法让事情奏效。

这是代码:

 DataTrigger d = new DataTrigger(); d.Binding = new Binding("Quantity"); d.Value = 1; Setter s = new Setter(BackgroundProperty, Brushes.Red); d.Setters.Add(s); Style st = new Style(typeof(DataGridRow)); st.Triggers.Add(d); this.Resources.Add(this.Resources.Count, st); 

我想使用上面的代码代替xaml

          

谢谢。

根据我对您的问题的理解,您试图找到一种方法来根据视图模型的某个属性的值设置DataTrigger的值。 所以我在这里有一个解决方案。

这是视图模型

 public class ViewModel : INotifyPropertyChanged { private string _text; private string _candidateValue; public string Text { get { return this._text; } set { this._text = value; if (null != PropertyChanged) { this.PropertyChanged(this, new PropertyChangedEventArgs("Text")); } } } public string CandidateValue { get { return this._candidateValue; } set { this._candidateValue = value; if (null != PropertyChanged) { this.PropertyChanged(this, new PropertyChangedEventArgs("Text")); } } } public event PropertyChangedEventHandler PropertyChanged; } 

在DataTrigger的绑定中需要一个IValueConverter

 public class ValueConverter : DependencyObject, IValueConverter { public static readonly DependencyProperty CandidateValueProperty = DependencyProperty.Register("CandidateValue", typeof(string), typeof(ValueConverter)); public string CandidateValue { get { return (string)GetValue(CandidateValueProperty); } set { SetValue(CandidateValueProperty, value); } } public ValueConverter() : base() { } public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (null != value) { if (value.ToString() == this.CandidateValue) return true; } return false; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } } 

而xaml非常简单

   

您需要在代码后面创建数据触发器。

 public MainWindow() { InitializeComponent(); //The view model object ViewModel vm = new ViewModel(); vm.CandidateValue = "1"; this.DataContext = vm; //create data trigger object for TextBox DataTrigger d = new DataTrigger(); //create binding object for data trigger Binding b = new Binding("Text"); ValueConverter c = new ValueConverter(); b.Converter = c; //create binding object for ValueConverter.CandidateValueProperty Binding convertBinding = new Binding("CandidateValue"); convertBinding.Source = vm; BindingOperations.SetBinding(c, ValueConverter.CandidateValueProperty, convertBinding); d.Binding = b; d.Value = true; Setter s = new Setter(TextBox.ForegroundProperty, Brushes.Red); d.Setters.Add(s); Style st = new Style(typeof(TextBox)); st.Triggers.Add(d); this.TextBox.Style = st; } 

这里的诀窍是ValueConverter有一个名为CandidateValueProperty的依赖项属性。 此属性绑定到视图模型的CandidateValue 。 因此,当输入值等于视图模型的CandidateValue时,TextBox的前景将为红色。