在RaisePropertyChanged事件不起作用后刷新textblock的值

时间:2011-11-04 19:20:18

标签: silverlight mvvm-light

我有一个简单的观点:

<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,并且在调试时我发现它会让我进入MainNameName的getter,但是没有任何变化已绑定Name的文本块。

为什么会这样,以及如何解决它?

1 个答案:

答案 0 :(得分:4)

您的RaisePropertyChanged方法调用对我来说不合适。参数应该是属性的 name ,而不是。换句话说,你应该写

        RaisePropertyChanged("MainName");
        RaisePropertyChanged("Name");

如果您的属性的类型不是string,那么您很快就会选择错误,因为在这种情况下您的代码将无法编译。