C# 组合框更改时将UserControl加载到窗口区域

C# 组合框更改时将UserControl加载到窗口区域,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个ComboBox,其中填充了CustomType集合。在comboBox更改中,我希望加载/更改特定区域中的内容,以便加载所选comboBox项的相关数据(可以是加载userControl的形式,或者我不介意为其指定DataTemplate) 这与这个问题类似。但在这个问题中,他谈论的是实际列表框中的单个数据模板,而我谈论的是在ComboBox更改中填充某些窗口区域 我使用的是MVVM(而不是PRISM).NET3.5 据我所知,问题是如何更改绑定到UI的基础数据,而不仅仅是数据模板 您

我有一个ComboBox,其中填充了CustomType集合。在comboBox更改中,我希望加载/更改特定区域中的内容,以便加载所选comboBox项的相关数据(可以是加载userControl的形式,或者我不介意为其指定DataTemplate)

这与这个问题类似。但在这个问题中,他谈论的是实际列表框中的单个数据模板,而我谈论的是在ComboBox更改中填充某些窗口区域


我使用的是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}值。。。。