WPF绑定不会获取任何更改

时间:2015-06-17 09:12:37

标签: c# wpf xaml mvvm inotifypropertychanged

在我的WPF应用程序中,我有一些属性,我已经绑定到XAML对应物,但由于某些原因,只要它们的值发生变化就不会设置。我已经实现了INotifyPropertyChanged界面以及为此View设置了DataContext,但它仍然没有进行任何更改。

我对此ViewModel中的其他属性使用了相同的模式,但其他属性却没有。

以下是我当前代码的片段:

视图模型

public class TestViewModel : INotifyPropertyChanged
{
    private string testString;

    public TestViewModel()
    {
        .....
        this.RunCommand = new RelayCommand(this.RunAction);
    }

    public string TestString
    {
        get
        {
            return this.testString;
        }

        set
        {
            this.testString = value;
            this.OnPropertyChanged("TestString");
        }
    }

    private void RunAction()
    {
        .....
        this.testString = "Running.";
    }
}

视图

<StatusBarItem>
    <TextBlock Text="{Binding Path=TestString, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
</StatusBarItem>

DataContext(在另一个MainWindow类的代码隐藏中设置)

var testViewModel = SimpleIoc.Default.GetInstance<TestViewModel>();
var testWindow = new TestWindow() { DataContext = testViewModel };
testingWindow.Show();

如果有帮助,这是多窗口应用程序的一部分,它使用MVVM-Light在类之间传递属性。

2 个答案:

答案 0 :(得分:4)

您没有更改TestString的值,您正在分配一个命令来更改值,但您似乎没有执行它。

this.RunCommand = new RelayCommand(this.RunAction);

将该命令绑定到某个地方或从某个地方手动执行。

您还需要指定属性而不是字段

this.TestString = "Running.";

答案 1 :(得分:0)

我发现了问题。您只是更新私有属性testString。但是,您不更新属性TestString,因此永远不会调用notify。

试试这个:

this.TestString = "Running";