我有一个字符串“连接状态”,它绑定到一个文本框文本属性
private string connectionStatus;
public string ConnectionStatus
{
get
{
return connectionStatus;
}
set
{
if (connectionStatus != value)
{
connectionStatus = value;
NotifyPropertyChanged("ConnectionStatus");
}
}
}
我有一个连接到继电器命令的按钮:
void ConnectCmd(object parameter)
{
ConnectionStatus = "Connecting..";
// Do some stuff
ConnectionStatus = "Connected"
}
XML
<TextBox x:Name="TextBlock_ConectedToName"
Grid.Column="1"
Grid.Row="0"
Grid.ColumnSpan="2"
Height="40"
Margin="5"
FontSize="26"
IsReadOnly="True"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Text="{Binding ConnectionStatus,
UpdateSourceTrigger=PropertyChanged}" />
按下按钮时,将调用中继命令,然后将字符串“ConnectionStaus”更新为“Connections…”,然后我进行一些处理,打开一个串行端口,如果成功,将ConnectionStatus更改为“Connected”。然而,“连接…”文本从不显示,文本更新似乎仅在RelayCommand函数完成时触发。如何让文本立即更新。
您正在默认ui线程上的relaycommand中运行代码。UI线程上的UI更新。它一次只能做一件事。
你可以让你的relay命令异步,并释放ui线程。使用。
await Task.Delay(20);
不要忘记把异步放在你的中继命令中,或者使用一个实现来实现它。