maui:从代码中更改绑定字符串不会更新 ui,除非重新生成字符串(mvvm)

inn*_*nom 1 c# data-binding maui

这是我的字符串:

public string EmptyViewText { get; set; } = "Please input a bin id first!*";
Run Code Online (Sandbox Code Playgroud)

我有一个简单的命令:

public async Task Entry(string barcode)
{
    MainThread.BeginInvokeOnMainThread(() =>
    {
        EmptyViewText = "Loading data...*";
        OnPropertyChanged();
    });
}
Run Code Online (Sandbox Code Playgroud)

这是触发的。

这是我的课:

public partial class BinViewModel : ObservableObject
Run Code Online (Sandbox Code Playgroud)

绑定本身有效,正如我确实看到我的价值观一样。但是当我更改代码中的值时,什么也没有发生。

绑定非常简单:

<Label Text="{Binding EmptyViewText}"  />
Run Code Online (Sandbox Code Playgroud)

然而,如果我禁用该字符串并重新启用它(重新渲染它),它确实会显示新的和更正的文本。

这里有什么问题?

IV.*_*IV. 5

您的代码正在调用OnPropertyChanged()而不带参数。无论该方法在哪里,它的定义可能类似于:

protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
    PropertyChanged?.Invoke( this, new PropertyChangedEventArgs(propertyName));
}
Run Code Online (Sandbox Code Playgroud)

本例中的调用者Entry不是EmptyViewText。它将触发属性更改事件,但属性错误。

看看如果使用显式参数调用它是否会产生影响:

public async Task Entry(string barcode)
{
    MainThread.BeginInvokeOnMainThread(() =>
    {
        EmptyViewText = "Loading data...*";
        OnPropertyChanged(nameof(EmptyViewText));
    });
}
Run Code Online (Sandbox Code Playgroud)