【问题标题】:Binding values while or for loop绑定值 while 或 for 循环
【发布时间】:2022-01-20 00:36:30
【问题描述】:

在我的直觉中,如果我在循环中绑定一个值,我相信 UI 会自动更新。
这是我的测试代码:

绑定

private string _client1 {get; set;}
public string client1
{
    get => _client1;
    set
    {
        _client1 = value;
        RaisePropertyChanged(nameof(client1));
    }
}

功能

public async void UpdateUI()
{
    await Task.Run(() =>
    {
        DispatcherHelper.CheckBeginInvokeOnUI(async () =>
        {
            for (int i = 0; i < 10; i++)
            {
                _client1 = i.ToString();
                RaisePropertyChanged(_client1);

                await Task.Delay(200);
            }
        });
    }).ConfigureAwait(false);
}

结果
0 在 UI 中显示且未更改。

预期结果
0 1 2 ... 10

我希望在 UI 中不断更改该值。这段代码有什么问题?

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    如果控件绑定到client1 属性,那么这就是您应该更改的内容,而不是支持字段_client1

    client1 = i.ToString();
    

    由于client1 的设置器已经调用了RaisePropertyChanged,所以循环中不需要这一行:

    RaisePropertyChanged(_client1);
    

    【讨论】:

    • 冬青......它运作良好。很抱歉打扰您。
    • @h1d3r00t 完全没有问题