带有依赖属性的DataBinding在wpf中

时间:2012-02-03 07:07:51

标签: wpf data-binding

我有2个窗口w1和w2,每个窗口有一个文本框,而w1中的txtbox1中的数据需要出现在w2 txtbox中。如何使用依赖属性实现此目的

2 个答案:

答案 0 :(得分:0)

我建议您为两个窗口使用通用的DataContext,而不是将它们绑定到彼此。举个例子,我们假设您将此类作为DataModel:

public class MyDataModel : INotifyPropertyChanged
{
    private string text;

    public string Text {
        get { return text; }
        set {
            text = value;
            RaisePropertyChanged("Text");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        var handler = PropertyChanged;
        if (handler != null) {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

然后您可以在Windows上将其设置为DataContext:

MyDataModel model = new MyDataModel();
model.Text = "Hello World";

MyWindow a = new MyWindow();
MyOtherWindow b = new MyOtherWindow();
a.DataContext = model;
b.DataContext = model;

如果你这样做了,可以将每个窗口中TextBoxes的Text属性设置为Binding,如下所示:

<TextBox Text="{Binding Text}"/>

如果将model.Text设置为其他值,则两个文本框现在都将自动更新。

答案 1 :(得分:0)

有两种形式的母亲吗?创造两者的形式?

在这种情况下我通常会这样做,因为无论如何我都在实现INotifyOnPropertyChanged,在母亲中我订阅了w1的PropertyChanged事件,获取了值,然后将它放在属性中w2。

我不会真正使用依赖属性

我知道它不漂亮,但我通常更喜欢它,因为我喜欢将1视图模型保持为1个视图关系。我的老板认为这样更容易阅读和理解。