首页 > 解决方案 > C# MVVM 切换按钮 IsChecked 绑定

问题描述

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

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

一旦我单击切换按钮,实际会发生什么,它会触发绑定命令,但无论 IsConnected 属性值如何,它都会将其视觉状态更改为已检查。我想要的是切换按钮的视觉状态取决于 IsConnected 属性。

如何避免这种竞争条件或防止 Checked 事件触发?

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);
        }
    }

标签: c#mvvmbindingtogglebuttonischecked

解决方案


推荐阅读