RaisePropertyChanged不起作用

时间:2012-04-08 10:38:11

标签: .net wpf mvvm

我有一个按钮,其内容与ViewModel的名为Test的属性绑定。

<Button Content="{Binding Test, Mode=TwoWay}"  
            Name="button1"Click="button1_Click" />

点击按钮我正在更改其内容

private void button1_Click(object sender, System.Windows.RoutedEventArgs e)
{
    button1.Content = "Yellow";
}

但是在属性设置器中,我想覆盖正在设置的内容并设置我自己的内容。 以下是相同的代码:

string _test;
public string Test
{
    get
    {
        return _test;
    }
    set
    {
        _test = "Something" + System.DateTime.Now.ToString();
        RaisePropertyChanged(() => Test);
    }
}

现在问题是按钮的内容被设置为“黄色”,而不是它应该像“Something ...”

如果我同时使用文本框绑定此属性,则会以正确的方式显示该值。

注意:这只是一个例子,我的问题的重点是raisepropertychanged。

请帮忙。

3 个答案:

答案 0 :(得分:1)

这是一个非常奇怪的制定者,你真的不应该这样做。如果我设置Test = "Yellow",我希望它是Yellow,而不是完全不同的东西。您应该将更新属性的代码放入单独的方法中并从事件处理程序中调用:

string _test;
public string Test
{
    get
    {
        return _test;
    }
    private set
    {
        _test = value;
        RaisePropertyChanged(() => Test);
    }
}

public void UpdateTest()
{
    Test = "Something" + System.DateTime.Now.ToString();
}

private void button1_Click(object sender, System.Windows.RoutedEventArgs e)
{
    UpdateTest();
}

答案 1 :(得分:1)

我怀疑你的

button1.Content = "Yellow"; 

正在删除与ViewModel的绑定。

您不应该直接在视图中设置button1的内容,而是设置ViewModel的内容,这将相应地更新View。

答案 2 :(得分:0)

感谢大家的回答。我已经发现它在非调试模式下运行时有效。但是在回调的情况下,即使在非调试模式下它也不会起作用。

我终于得到了文章http://info.titodotnet.com/2011/08/silverlight-dependency-property-clr.html

中提到的解决方案

干杯!

相关问题