如何实现双向数据绑定?

时间:2015-07-27 15:12:56

标签: c# wpf xaml mvvm

我有一个名为ProfileViewModel的类,它包含如下所示的简单属性:

class SomeViewModel : INotifyPropertyChanged
    {
        private Foo foo;
        public Foo Foo
            {
                get { return foo; } 
            }

        public string Bar
            {
                get { return foo.bar; }
                set
                    {
                        foo.bar = value;
                        NotifyPropertyChanged ("Bar");
                    }
            }

            // More properties like the above

         public event PropertyChangedEventHandler PropertyChanged;
             protected void NotifyPropertyChanged (string Info)
    {
    if (PropertyChanged != null)
      {
         PropertyChanged (this, new PropertyChangedEventArgs (Info));
      }
    }

我删除了一些不重要的内容。现在,我试图在一些文本框和上面的类的属性之间创建一个双向绑定,但似乎没有任何效果。在XAML中,我尝试了两种方法:

      <TextBox Margin="5, 25, 5, 0" VerticalAlignment="Top" Height="25" Name="BarField"
               Text="{Binding CurrentFoo.Bar}"/>

      <TextBox Margin="5, 75, 5, 0" VerticalAlignment="Top" Height="25" Name="BarField" 
               Text="{Binding Bar, ElementName=CurrentFoo}"/>

当前都不起作用(无论我是否将其设置为Two-Way),因为文本框中没有任何内容,更改文本框中的文本也不会影响CurrentFoo对象。究竟我做错了什么?这里缺少什么?我需要在代码中进行绑定吗?

1 个答案:

答案 0 :(得分:2)

为了让你的第一个绑定工作,你的Foo属性必须是可读/写的,目前它是只读的。

对于第二种方法,您不需要设置ElementName,只需设置Mode porperty:

 <TextBox Text="{Binding Bar, Mode=TwoWay}"/>

注意:我更喜欢第一个。