UserControl的datagrid数据行中两个下拉框实现两级联动第二个下拉框的数据会跟随第一个下拉框所选中的数据进行改变但是每行数据的选择不影响其他行以WVVM模式实现请给出实例代码
以下是一个使用WVVM模式实现UserControl中有两个下拉框实现两级联动的示例代码:
首先,创建一个名为MyUserControl的UserControl,并在XAML文件中添加两个下拉框:
<UserControl x:Class="YourNamespace.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<StackPanel>
<ComboBox ItemsSource="{Binding FirstItems}" SelectedItem="{Binding SelectedFirstItem}" SelectedIndex="0"/>
<ComboBox ItemsSource="{Binding SecondItems}" SelectedItem="{Binding SelectedSecondItem}" SelectedIndex="0"/>
</StackPanel>
</Grid>
</UserControl>
然后,创建一个名为MyUserControlViewModel的ViewModel,并实现两级联动的逻辑:
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
namespace YourNamespace
{
public class MyUserControlViewModel : INotifyPropertyChanged
{
private ObservableCollection<string> _firstItems;
private ObservableCollection<string> _secondItems;
private string _selectedFirstItem;
private string _selectedSecondItem;
public ObservableCollection<string> FirstItems
{
get { return _firstItems; }
set
{
_firstItems = value;
OnPropertyChanged(nameof(FirstItems));
}
}
public ObservableCollection<string> SecondItems
{
get { return _secondItems; }
set
{
_secondItems = value;
OnPropertyChanged(nameof(SecondItems));
}
}
public string SelectedFirstItem
{
get { return _selectedFirstItem; }
set
{
_selectedFirstItem = value;
UpdateSecondItems();
OnPropertyChanged(nameof(SelectedFirstItem));
}
}
public string SelectedSecondItem
{
get { return _selectedSecondItem; }
set
{
_selectedSecondItem = value;
OnPropertyChanged(nameof(SelectedSecondItem));
}
}
public MyUserControlViewModel()
{
// 初始化第一个下拉框的数据
FirstItems = new ObservableCollection<string>(new List<string> { "A", "B", "C" });
// 初始化第二个下拉框的数据
SecondItems = new ObservableCollection<string>(new List<string> { "1", "2", "3" });
// 设置第一个下拉框的初始选择项
SelectedFirstItem = FirstItems[0];
}
private void UpdateSecondItems()
{
// 根据第一个下拉框的选择项更新第二个下拉框的数据
switch (SelectedFirstItem)
{
case "A":
SecondItems = new ObservableCollection<string>(new List<string> { "1", "2", "3" });
break;
case "B":
SecondItems = new ObservableCollection<string>(new List<string> { "4", "5", "6" });
break;
case "C":
SecondItems = new ObservableCollection<string>(new List<string> { "7", "8", "9" });
break;
}
// 设置第二个下拉框的初始选择项
SelectedSecondItem = SecondItems[0];
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
最后,在使用该UserControl的主界面中,将MyUserControl添加到XAML中,并设置其ViewModel:
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YourNamespace"
Title="MainWindow" Height="450" Width="800">
<Grid>
<local:MyUserControl>
<local:MyUserControl.DataContext>
<local:MyUserControlViewModel/>
</local:MyUserControl.DataContext>
</local:MyUserControl>
</Grid>
</Window>
这样,每行数据的选择将不会影响其他行的选择,同时第二个下拉框的数据将根据第一个下拉框的选择项进行动态改变
原文地址: http://www.cveoy.top/t/topic/hXGJ 著作权归作者所有。请勿转载和采集!