C# 组合框更改时将UserControl加载到窗口区域
我有一个ComboBox,其中填充了CustomType集合。在comboBox更改中,我希望加载/更改特定区域中的内容,以便加载所选comboBox项的相关数据(可以是加载userControl的形式,或者我不介意为其指定DataTemplate) 这与这个问题类似。但在这个问题中,他谈论的是实际列表框中的单个数据模板,而我谈论的是在ComboBox更改中填充某些窗口区域C# 组合框更改时将UserControl加载到窗口区域,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个ComboBox,其中填充了CustomType集合。在comboBox更改中,我希望加载/更改特定区域中的内容,以便加载所选comboBox项的相关数据(可以是加载userControl的形式,或者我不介意为其指定DataTemplate) 这与这个问题类似。但在这个问题中,他谈论的是实际列表框中的单个数据模板,而我谈论的是在ComboBox更改中填充某些窗口区域 我使用的是MVVM(而不是PRISM).NET3.5 据我所知,问题是如何更改绑定到UI的基础数据,而不仅仅是数据模板 您
我使用的是MVVM(而不是PRISM).NET3.5 据我所知,问题是如何更改绑定到UI的基础数据,而不仅仅是数据模板 您可以使用
EventSetter
,它将在代码隐藏中处理,您可以在其中为您提到的区域切换DataContext:
<ComboBox>
<ComboBox.Resources>
<Style TargetType="ComboBoxItem">
<EventSetter Event="Selector.SelectionChanged"
Handler="YourHandler"/>
</Style>
</ComboBox.Resources>
</ComboBox>
但从MVVM的角度来看,这可能不是完美的解决方案,因此您可以引入自己的ComboBox类,该类支持命令,请参阅以下文章:
通过这种方式,您可以使用命令将逻辑与UI分离。U可以使用
ContentControl
,它是根据组合框选择动态确定的实际内容的占位符
以下代码仅供参考
<Window ...>
<Window.Resources>
<MyView1 x:Key="MyView1" />
<MyView2 x:Key="MyView2" />
</Window.Resources>
...
<ComboBox x:Name="MyCombo">
<ComboBox.ItemsSource>
<sys:String>"MyView1"</sys:String>
<sys:String>"MyView2"</sys:String>
....
</ComboBox.ItemsSource>
</ComboBox>
...
<!-- This is where your region is loaded -->
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem,
ElementName=MyCombo}"
Value="MyView1">
<Setter Property="Content"
Value="{StaticResource MyView1}"
</DataTrigger>
<DataTrigger Binding="{Binding Path=SelectedItem,
ElementName=MyCombo}"
Value="MyView2">
<Setter Property="Content"
Value="{StaticResource MyView2}"
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</Window>
...
“MyView1”
“MyView2”
....
...
所以基本上你会改变将要显示的模型,不仅是UI布局?@sll,模型将保持原样,而且数据可能会显示/表示不同,这取决于用户从ComboBoxTnx中为你的答案选择的选项+1,这实际上与仅仅改变UI有关。tnx@AngelWPF,现在就尝试一下,将让您知道是否/何时可以使用默认视图?由于用户可以输入组合框中没有的值,是否可以为此提供默认内容/视图?(这样,如果组合框中没有选择任何现有选项,它将故障切换到该状态)应为该DataTrigger检查(x:Null}值。。。。