简体   繁体   中英

C# WPF Data Binding CheckBoxes based on ComboBox Selection in MVVM

I am currently learning the MVVM design pattern for WPF and I would like to bind my CheckBoxes based on the SelectedItem of my ComboBox which is data binded to a Dictionary where the key is my device serial number and the value is a ViewModel for that device.

在此处输入图像描述

Ideally, my SelectedItem should be the value which is IOBoardViewModel.

<ComboBox Name="io_boards_list" 
          ItemsSource="{Binding IOBoards}" DisplayMemberPath="Key" SelectedValuePath="Value"
          HorizontalAlignment="Left" Margin="361,28,0,0" VerticalAlignment="Top" Width="657" Height="35"/>

This is where I am most unclear: how to bind these bool values in my IOBoard Model.

<CheckBox IsChecked="{ Binding Value.io_board.s0 }" Content="Input 0" Canvas.Left="10" Canvas.Top="10" Height="15"/>
<CheckBox IsChecked="{ Binding Value.io_board.s1 }" Content="Input 1" Canvas.Left="10" Canvas.Top="36" Height="15"/>
<CheckBox IsChecked="{ Binding Value.io_board.s2 }" Content="Input 2" Canvas.Left="10" Canvas.Top="63" Height="15"/>

In my IOBoardViewModel I refer to the actual Model which is where I hold my bool value.

        public Dictionary<string, IIOBoardViewModel> IOBoards { get; private set; }

        public FullIOBoard io_board
        {
            get { return _io_board; }
        }

Here is a snippet from my IOBoard Model:

        public bool s0
        {
            get
            {
                return _s0;
            }
            set
            {
                _s0 = value;
                OnPropertyChanged("s0");
            }
        }

        public bool s1
        {
            get
            {
                return _s1;
            }
            set
            {
                _s1 = value;
                OnPropertyChanged("s1");
            }
        }

        public bool s2
        {
            get
            {
                return _s2;
            }
            set
            {
                _s2 = value;
                OnPropertyChanged("s2");
            }
        }

I would like to know if I have the right idea on how to bind the data together in the MVVM pattern, and if not, I would greatly appreciate insights or advice.

UPDATE: I have thought of a method that I could use where I bind the SelectedItem of the ComboBox (which would be the Dictionary's identifying serial number to a variable in my ViewModel):

public string SelectedItem
        {
            get
            {
                return _SelectedItem;
            }
            set
            {
                _SelectedItem = value;
            }
        }

Now I believe I should bind my IsChecked for the CheckBox to

<CheckBox IsChecked="{ Binding IOBoards[SelectedItem].s0 }" Content="Input 0" Canvas.Left="10" Canvas.Top="10" Height="15"/>

However I am still unable to get the checkbox to update even though I've hardcoded one of the signals to always be true:

_io_board.s0 = true;
_io_board.s1 = (inputSignal & 0x02) == 0x02;

you can bind directly to SelectedItem of ComboBox by referring to it by name:

<CheckBox IsChecked="{ Binding SelectedItem.Value.io_board.s0, ElementName=io_boards_list }" 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM