我有一个名为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对象。究竟我做错了什么?这里缺少什么?我需要在代码中进行绑定吗?
答案 0 :(得分:2)
为了让你的第一个绑定工作,你的Foo属性必须是可读/写的,目前它是只读的。
对于第二种方法,您不需要设置ElementName,只需设置Mode porperty:
<TextBox Text="{Binding Bar, Mode=TwoWay}"/>
注意:我更喜欢第一个。