就个人而言,我会使用 MVVM 设计模式做这样的事情
将ComboBox绑定到ViewModel或Model对象的集合
所以你会有
<ComboBox ItemsSource="{Binding SomeCollection}"
SelectedItem="{Binding SelectedViewModel}"
DisplayMemberPath="DisplayName" />
whereSomeCollection是object您的ViewModel, 的集合,SelectedViewModel是object保存所选项目的属性
SomeCollection = new ObservableCollection<object>();
SomeCollection.Add(new ViewModelA());
SomeCollection.Add(new ViewModelB());
SomeCollection.Add(new ViewModelC());
SomeCollection.Add(new ViewModelD());
SomeCollection.Add(new ViewModelE());
SelectedViewModel = SomeCollection[0];
现在您SaveCommand可以访问通过使用选择的任何内容SelectedViewModel并将其转换为基于typeof(SelectedViewModel)的适当类型
就个人而言,我会使用通用接口IViewModel而不是object,并让它包含一些通用属性(例如DisplayName)和方法。根据您的功能,您甚至可以让它包含它自己的保存逻辑,因此您可以在保存命令中执行它:
SelectedViewModel.Save();
至于显示正确的 View/UserControl,我会使用ContentControl,Content绑定到你的SelectedViewModel, 并使用隐式数据模板告诉 WPF 如何绘制每个对象
<ContentControl Content="{Binding SelectedViewModel}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type local:ViewModelA}">
<local:UserControlA />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModelB}">
<local:UserControlB />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModelC}">
<local:UserControlC />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModelD}">
<local:UserControlD />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModelE}">
<local:UserControlE />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>