簡體   English   中英

在WPF DataTrigger值中綁定

[英]Binding in WPF DataTrigger value

嗯,這可能是一個簡單的問題,但我無法找到解決方案。

我有一個DataTrigger

<DataTrigger Binding="{Binding Quantity}" Value="0">

現在我想將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

<Page.Resources>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Quantity}" Value="1">
                <Setter Property="Background" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Page.Resources>

謝謝。

要我對你的問題的理解,你正在努力尋找一種方法來設置Value你的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非常簡單

<TextBox x:Name="TextBox" Text="{Binding Text,UpdateSourceTrigger=PropertyChanged}">
    </TextBox>

您需要在后面的代碼中創建數據觸發器。

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的前景將為紅色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM