绑定值 while 或 for 循环
Binding values while or for loop
根据我的直觉,如果我在循环中绑定一个值,我相信 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 中连续更改值。这段代码有什么问题?
如果控件绑定到 client1
属性,那么这就是您应该更改的内容,而不是支持字段 _client1
:
client1 = i.ToString();
并且由于 client1
的 setter 已经调用了 RaisePropertyChanged
,因此您的循环中不需要这一行:
RaisePropertyChanged(_client1);
根据我的直觉,如果我在循环中绑定一个值,我相信 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 中连续更改值。这段代码有什么问题?
如果控件绑定到 client1
属性,那么这就是您应该更改的内容,而不是支持字段 _client1
:
client1 = i.ToString();
并且由于 client1
的 setter 已经调用了 RaisePropertyChanged
,因此您的循环中不需要这一行:
RaisePropertyChanged(_client1);