当前位置:  开发笔记 > 编程语言 > 正文

WPF中的双向绑定

如何解决《WPF中的双向绑定》经验,为你挑选了2个好方法。

我无法在WPF中获得双向绑定.

我的应用程序主窗口中有一个字符串属性绑定到TextBox(我将模式设置为"TwoWay").

TextBox的值将更新的唯一时间是窗口初始化.

当我键入TextBox时,底层字符串属性值不会更改.

当字符串属性的值由外部源(例如,Click上的事件,仅重置TextBox的值)更改时,更改不会传播到TextBox.

即使在这个几乎无足轻重的例子中,我必须实现哪些步骤才能使双向绑定正常工作?



1> Gishu..:

很可能你正在尝试绑定到.net CLR属性而不是WPF dependencyProperty(除了其他一些东西之外还提供Change Notification).
对于普通的CLR属性,您需要在PropertyChanged的事件处理程序中实现INotifyPropertyChanged并强制更新文本框.

因此,使用属性实现此对象的对象,在属性设置器中引发事件.(现在我们有财产变更通知)

确保将对象设置为UI元素/控件的DataContext属性

当我开始学习WPF数据绑定时,这也让我失望了.

更新: OP,如果我在错误的树上咆哮,那将是浪费时间..反正现在,因为你不得不挖一点......你会记住它很长一段时间.这是完成此答案的代码片段.还发现,只要我跳出选项,就会自动更新文本框.如果您的datacontext对象不是实现INotifyPropertyChanged的对象,则只需手动订阅该事件并更新UI.

MyWindow.xaml


    
        
        We're twin blue boxes bound to the same property.
        
    

MyWindow.xaml.cs

public partial class MyWindow : Window, INotifyPropertyChanged
{
    public MyWindow()
    {
        InitializeComponent();
        this.MyDotNetProperty = "Go ahead. Change my value.";
        TopLevelContainer.DataContext = this;
    }

    private string m_sValue;
    public string MyDotNetProperty
    {
        get { return m_sValue; }
        set
        {
            m_sValue = value;
            if (null != this.PropertyChanged)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("MyDotNetProperty"));
            }
        }
    }

    #region INotifyPropertyChanged Members
    public event PropertyChangedEventHandler PropertyChanged;
    #endregion
}


我认为,指向最富有成效的方向的帖子,如果不是更多,那么作为直接答案值得勾结.
这对我有帮助,所以+1,但我还必须在xaml中的{Binding}定义中包含`UpdateSourceTrigger = PropertyChanged`才能生效.

2> 小智..:

我觉得需要增加一些精度:

"两种方式"数据绑定不仅仅是"单向"数据绑定.

"单向"数据绑定是从源到依赖属性的绑定.源必须实现INotifyProertyChanged,以便从源到目标获得更改传播.

为了得到"2路",因此要获得从目标传播到源代码,这取决于你的绑定设置的结合模式.如果没有为绑定设置任何BindingMode,则将使用默认的绑定模式,并且此默认模式是目标依赖项属性的特征.

例:

绑定到字符串属性的文本框,名为"MyTextProperty".在代码中,将Textbox.Text DependencyProperty绑定到对象"MyObject"上的"MyTextProperty"

- >"单向"绑定:"My TextProperty"的setter必须引发一个Property Changed事件,而"MyObject"必须实现INotifyPropertyChanged.

- >"2种方式的数据绑定":除了需要什么"的一种方式",bindingMode必须设置为"2种方式".在这种特殊情况下,Textbox的Text DependencyProperty确实有"2路"作为默认模式,所以没有别的事可做!

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有