C#.NET如何从其他用户控件替换用户控件

时间:2014-08-20 07:27:46

标签: c# wpf wpf-controls

我有一个 MainForm 和3个用户控件。在我的主要表单中,按下按钮时,我已在 Panel_1 中加载 UserControl_1 。我的 UserControl_1 还有其他2个按钮。如果我按 UserControl_1-> Button_1 ,则 UserControl_2 将加载 MainForm的Panel_1 UserControl_1 将被处置。

Main Form

User Control 1

如何做到这一点.. ??

2 个答案:

答案 0 :(得分:1)

一般的想法是让一个UI控件显示不同的UserControl。要做到这一点,你需要做一些事情。

a)创建一个实现INotifyPropertyChanged interface

BaseViewModel

b)创建一个...ViewModel类,扩展每个 BaseViewModel的{​​{1}}类

c)为UserControl中的每个 DataTemplate / ...ViewModel对声明UserControl ...它应该是这样的:< / p>

App.xaml

d)在对象中创建一个属性,该对象设置为<DataTemplate DataType="{x:Type YourViewModelsPrefix:SomeViewModel}"> <YourViewsPrefix:SomeView /> </DataTemplate> DataContext类型MainWindow.xaml ...为此,我们将其命名为BaseViewModel例。

e)在ViewModel的{​​{1}}的XAML中添加ContentControl,以显示MainWindow.xaml

UserControl

f)最后,将该属性设置为任何派生的<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>