2

我有一个按钮,其内容与 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);
    }
}

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

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

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

请帮忙。

4

3 回答 3

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();
}
于 2012-04-08T10:51:59.057 回答
1

我怀疑你的

button1.Content = "Yellow"; 

正在删除与您的 ViewModel 的绑定。

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

于 2012-04-09T12:06:35.727 回答
0

谢谢大家的回答。我发现当您在非调试模式下运行它时它可以工作。但是在回调的情况下,即使在非调试模式下也不会工作。

我终于得到了文章http://info.titodotnet.com/2011/08/silverlight-dependency-property-clr.html中提到的解决方案

干杯!

于 2012-04-10T05:04:30.853 回答