C#MVVM切换按钮已检查绑定
我的MVVM代码需要将WPF切换按钮连接到ViewModel 要求是,当“单击”切换按钮时,它会执行绑定命令,更改IsConnected属性(bool)。此属性应定义切换按钮的视觉状态 实际发生的情况单击“切换”按钮后,它将触发绑定命令,但无论“断开连接”属性值如何,它都会将其视觉状态更改为“已选中”。我想要的是切换按钮的视觉状态依赖于IsConnected属性 如何避免此竞赛条件或防止已检查事件触发 XAML代码是:C#MVVM切换按钮已检查绑定,c#,mvvm,binding,togglebutton,ischecked,C#,Mvvm,Binding,Togglebutton,Ischecked,我的MVVM代码需要将WPF切换按钮连接到ViewModel 要求是,当“单击”切换按钮时,它会执行绑定命令,更改IsConnected属性(bool)。此属性应定义切换按钮的视觉状态 实际发生的情况单击“切换”按钮后,它将触发绑定命令,但无论“断开连接”属性值如何,它都会将其视觉状态更改为“已选中”。我想要的是切换按钮的视觉状态依赖于IsConnected属性 如何避免此竞赛条件或防止已检查事件触发 XAML代码是: <ToggleButton Name="btnConnect
<ToggleButton Name="btnConnect"
DataContext="{Binding someViewModel, Source={StaticResource Locator}}"
IsChecked="{Binding Path=IsConnected, Mode=OneWay}"
Command="{Binding ConnectCommand}">
</ToggleButton>
ViewModel的快照:
public someViewModel()
{
Task.Factory.StartNew(() => Initialize());
}
public bool IsConnected
{
get
{
return m_bConnected;
}
set
{
Set<bool>(() => this.Connected, ref m_bConnected, value);
}
}
private void Initialize()
{
// Init Motion controller connection
ConnectCommand = new RelayCommand(ConnectMethod);
}
public RelayCommand ConnectCommand
{
get;
private set;
}
public void ConnectMethod()
{
try
{
// When in simulation mode
//m_API.OpenCommSimulator();
m_API.OpenCommEthernet("192.168.0.139", 731);
if (m_API.IsConnected)
Connected = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "CONNECTION ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
public someViewModel()
{
Task.Factory.StartNew(()=>Initialize());
}
公共图书馆断开了
{
得到
{
返回m_b已连接;
}
设置
{
设置(()=>this.Connected,ref m_b Connected,value);
}
}
私有void初始化()
{
//初始化运动控制器连接
ConnectCommand=新的RelayCommand(ConnectMethod);
}
公共RelayCommand ConnectCommand
{
得到;
私人设置;
}
公共方法()
{
尝试
{
//处于模拟模式时
//m_API.OpenCommSimulator();
m_API.OpenCommEthernet(“192.168.0.139”,731);
如果(m_API.未连接)
连接=真;
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message,“连接错误”,MessageBoxButton.OK,MessageBoxImage.ERROR);
系统.诊断.调试.写入线(例如消息);
}
}
视图模型是什么样子的?添加了视图模型快照我看不到复选框绑定到的IsConnected属性。你能在虚拟机代码中包含这个吗?对不起,编辑错误。现在显示。我认为您需要实现INotifyPropertyChanged并触发PropertyChanged事件,以使VM中的这些更改反映在GUI中。您的视图模型是什么样子的?添加了ViewModel快照我看不到复选框绑定到的IsConnected属性。你能在虚拟机代码中包含这个吗?对不起,编辑错误。现在显示。我认为您需要实现INotifyPropertyChanged并触发PropertyChanged事件,以使VM中的这些更改反映在GUI中。