我有一个 MainForm 和3个用户控件。在我的主要表单中,按下按钮时,我已在 Panel_1 中加载 UserControl_1 。我的 UserControl_1 还有其他2个按钮。如果我按 UserControl_1-> Button_1 ,则 UserControl_2 将加载 MainForm的Panel_1 和 UserControl_1 将被处置。
如何做到这一点.. ??
答案 0 :(得分:1)
一般的想法是让一个UI控件显示不同的UserControl
。要做到这一点,你需要做一些事情。
a)创建一个实现INotifyPropertyChanged
interface
BaseViewModel
类
b)创建一个...ViewModel
类,扩展每个 BaseViewModel
的{{1}}类。
c)为 d)在对象中创建一个属性,该对象设置为 e)在 f)最后,将该属性设置为任何派生的 然后,框架将搜索UserControl
中的每个 DataTemplate
/ ...ViewModel
对声明UserControl
...它应该是这样的:< / p>
App.xaml
<DataTemplate DataType="{x:Type YourViewModelsPrefix:SomeViewModel}">
<YourViewsPrefix:SomeView />
</DataTemplate>
DataContext
类型MainWindow.xaml
...为此,我们将其命名为BaseViewModel
例。 ViewModel
的{{1}}的XAML中添加ContentControl
,以显示MainWindow.xaml
:UserControl
<ContentControl Content="{Binding ViewModel}" />
类:...ViewModel
ViewModel = new SomeViewModel();
类型的DataTemplate
,找到SomeViewModel
中定义的类型,根据该模板呈现视图模型,从而显示您的{{1} }}。要更改视图模型,只需将App.xaml
属性设置为另一个派生的UserControl
类:ViewModel
答案 1 :(得分:0)
您可以使用ContentPresenter在主窗体中显示您的用户控件。此内容呈现器将取决于视图模型中的状态。单击任何用户控件中的按钮后,您可以更改state属性,ContentPresenter将使用新用户控件替换当前用户控件。
例如:
<ContentPresenter Content="{Binding}">
<ContentPresenter.Style>
<Style TargetType="ContentPresenter">
<Style.Triggers>
<DataTrigger Binding="{Binding State}" Value="State1">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<settingsview:UserControl1 />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding State}" Value="State2">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<settingsview:UserControl2 />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding State}" Value="State3">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<settingsview:UserControl3 />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentPresenter.Style>
</ContentPresenter>