当UI元素调用MVVM属性集时,Windows 8.1 UI未更新

本文关键字:UI Windows 更新 调用 元素 MVVM 属性 | 更新日期: 2023-09-27 18:26:20

我的问题是,如果用户界面调用绑定到的属性的setter,则用户界面不会更新。这里有一个例子可以说明这一点:

假设我有一个文本框绑定到这样的属性。

<TextBox PlaceholderText="Task Name..." FontSize="24" 
         Text="{Binding TaskName, Mode=TwoWay}" />

这是我的财产:

public string TaskName
{
    get
    {
        return _taskName;
    }
    set
    {
        _taskName = "something";
        RaisePropertyChanged();
    }
}

如果我在文本框中写了一些东西,那么在它失去焦点后,"something"应该会出现在里面,但没有任何变化。但是,如果我用代码更改属性的值,如下所示:

TaskName = "something";

然后,更改也将显示在UI上。

一些进一步的信息。这就是我实现INotifyPropertyChange接口的方式:

public class ViewModelBase : INotifyPropertyChanged
{
    public static Navigator NavigationService;
    public static void SetNavigationService(Navigator service)
    {
        NavigationService = service;
    }
    protected void GoBack()
    {
        NavigationService.GoBack();
    }
    public event PropertyChangedEventHandler PropertyChanged;
    [NotifyPropertyChangedInvocator]
    protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

我真的不知道它为什么会这样。我找了好几个小时都找不到。

当UI元素调用MVVM属性集时,Windows 8.1 UI未更新

在属性的setter中,您需要调用

RaisePropertyChanged(x => x.TaskName)