我有一个简单的观点:
<Grid x:Name="LayoutRoot">
<TextBox Height="23" HorizontalAlignment="Left" Margin="66,66,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Path=MainName,Mode=TwoWay}" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="66,142,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" Text="Space to tab :)" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="67,220,0,0" Name="textBox3" VerticalAlignment="Top" Width="120" Text="{Binding Path=Name}" />
</Grid>
在ViewModel中我有:
private string _mainName;
public string Name
{
get { return MainName; }
}
public string MainName
{
get { return _mainName; }
set
{
_mainName = value;
RaisePropertyChanged(MainName);
RaisePropertyChanged(Name);
}
}
当我更改第一个文本框中的值时,会调用RaisePropertyChange
,并且在调试时我发现它会让我进入MainName
和Name
的getter,但是没有任何变化已绑定Name
的文本块。
为什么会这样,以及如何解决它?
答案 0 :(得分:4)
您的RaisePropertyChanged
方法调用对我来说不合适。参数应该是属性的 name ,而不是值。换句话说,你应该写
RaisePropertyChanged("MainName");
RaisePropertyChanged("Name");
如果您的属性的类型不是string
,那么您很快就会选择错误,因为在这种情况下您的代码将无法编译。