WPF MVVM模式DataGrid Combobox级联

1.View代码

<DataGrid ItemsSource="{Binding DataItems}" AutoGenerateColumns="False">         
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="First ComboBox">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding FirstComboBoxItems}" SelectedItem="{Binding FirstComboBoxItem, Mode=TwoWay}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Second ComboBox"> 
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                     <ComboBox ItemsSource="{Binding SecondComboBoxItems}" SelectedItem="{Binding SecondComboBoxItem, Mode=TwoWay}" />
                 </DataTemplate> 
            </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid>
  1. ViewModel代码

public class MainViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private ObservableCollection<DataItem> _dataItems;
    public ObservableCollection<DataItem> DataItems
    {
        get { return _dataItems; }
        set
        {
            _dataItems = value;
            OnPropertyChanged("DataItems");
        }
    }
    private ObservableCollection<string> _firstComboBoxItems;
    public ObservableCollection<string> FirstComboBoxItems
    {
        get { return _firstComboBoxItems; }
        set
        {
            _firstComboBoxItems = value;
            OnPropertyChanged("FirstComboBoxItems");
        }
    }
    private ObservableCollection<string> _secondComboBoxItems;
    public ObservableCollection<string> SecondComboBoxItems
    {
        get { return _secondComboBoxItems; }
        set
        {
            _secondComboBoxItems = value;
            OnPropertyChanged("SecondComboBoxItems");
        }
    }
    private string _selectedFirstComboBoxItem;
    public string SelectedFirstComboBoxItem
    {
        get { return _selectedFirstComboBoxItem; }
        set
        {
            _selectedFirstComboBoxItem = value;
            OnPropertyChanged("SelectedFirstComboBoxItem");
            //第一个下拉框选择后更新第二个下拉框的下拉选项
            UpdateSecondComboBoxItems();
        }
    }
    private string _selectedSecondComboBoxItem;
    public string SelectedSecondComboBoxItem
    {
        get { return _selectedSecondComboBoxItem; }
        set
        {
            _selectedSecondComboBoxItem = value;
            OnPropertyChanged("SelectedSecondComboBoxItem");
        }
    }
    public MainViewModel()
    {
        DataItems = new ObservableCollection<DataItem>();
        FirstComboBoxItems = new ObservableCollection<string>();
        SecondComboBoxItems = new ObservableCollection<string>();
        //填充DataItems
        DataItems.Add(new DataItem { FirstComboBoxItem = "Item1", SecondComboBoxItem = "SubItem1" });
        DataItems.Add(new DataItem { FirstComboBoxItem = "Item1", SecondComboBoxItem = "SubItem2" });
        DataItems.Add(new DataItem { FirstComboBoxItem = "Item2", SecondComboBoxItem = "SubItem3" });
        DataItems.Add(new DataItem { FirstComboBoxItem = "Item2", SecondComboBoxItem = "SubItem4" });
        //填充FirstComboBoxItems
        FirstComboBoxItems.Add("Item1");
        FirstComboBoxItems.Add("Item2");
    }
    private void UpdateSecondComboBoxItems()
    {
        SecondComboBoxItems.Clear();
        foreach (DataItem item in DataItems)
        {
            if (item.FirstComboBoxItem == SelectedFirstComboBoxItem)
            {
                SecondComboBoxItems.Add(item.SecondComboBoxItem);
            }
        }
    }
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值