C#MVVM切换按钮已检查绑定

C#MVVM切换按钮已检查绑定,c#,mvvm,binding,togglebutton,ischecked,C#,Mvvm,Binding,Togglebutton,Ischecked,我的MVVM代码需要将WPF切换按钮连接到ViewModel 要求是,当“单击”切换按钮时,它会执行绑定命令,更改IsConnected属性(bool)。此属性应定义切换按钮的视觉状态 实际发生的情况单击“切换”按钮后,它将触发绑定命令,但无论“断开连接”属性值如何,它都会将其视觉状态更改为“已选中”。我想要的是切换按钮的视觉状态依赖于IsConnected属性 如何避免此竞赛条件或防止已检查事件触发 XAML代码是: <ToggleButton Name="btnConnect

我的MVVM代码需要将WPF切换按钮连接到ViewModel

要求是,当“单击”切换按钮时,它会执行绑定命令,更改IsConnected属性(bool)。此属性应定义切换按钮的视觉状态

实际发生的情况单击“切换”按钮后,它将触发绑定命令,但无论“断开连接”属性值如何,它都会将其视觉状态更改为“已选中”。我想要的是切换按钮的视觉状态依赖于IsConnected属性

如何避免此竞赛条件或防止已检查事件触发

XAML代码是:

<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中。