gpt4 book ai didi

c# - WPF 如何更改 ContentControl 内容

转载 作者:太空狗 更新时间:2023-10-30 00:41:17 25 4
gpt4 key购买 nike

单击按钮时如何更改内容控件的内容。例如,当我单击某个按钮时,我有一个名为“主页”的用户控件的内容控件,我想用另一个用户控件更改内容控件的内容。

<Window ...
xmlns:ViewModel="clr-namespace:PAL_PlayAndLearn.ViewModels"
xmlns:Pages="clr-namespace:PAL_PlayAndLearn.Pages"
...>
<Window.DataContext>
<ViewModel:AppViewModel />
</Window.DataContext>
<Grid>
<ContentControl Content="{Binding HomePage}"/>
</Grid>
</Window>

你能帮帮我吗,因为我没有很多时间。

最佳答案

您基本上需要一个主视图模型或父 View 模型。这个 View 模型应该有一个 BaseViewModel 类型的属性,比方说命名为 ViewModel所有您的其他页面 View 模型都应扩展此基

<ContentControl Content="{Binding ViewModel}" />

现在,因为您的 View 模型都有一个基本类型 BaseViewModel,所以它们可以全部设置为 ViewModel 属性的值...所以要加载一个新的 View 模型,您将其设置为此属性的值:

ViewModel = new HomeView();

但是我们如何显示相关 View 呢?让我们使用 DataTemplate 为我们做这件事...为您将在此处使用的每个 View 模型添加这个和类似的条目:

<DataTemplate DataType="{x:Type ViewModels:HomeViewModel}">
<Views:HomeView />
</DataTemplate>

现在,只要我们将相关 View 模型设置为 ViewModel 属性的值,WPF 就会呈现我们的 View 。最后,Button?为此,我们需要主视图模型中的 ICommand Hook 到主视图中的 Button,我建议使用 RelayCommand .请注意,您需要更改主视图:

<Grid>
<!-- Add your Buttons or Menu here, above where the views will be -->
<ContentControl Content="{Binding HomePage}"/>
</Grid>

因此,当在主视图中单击 Button 时,您只需更改 ViewModel 属性的值,DataTemplate 将确保相关 View 在 UI 中呈现。这是我自己的自定义 ICommand 实现之一,如 RelayCommand 将加载 View 模型(如果尚未加载):

public ICommand DisplayHomeView
{
get { return new ActionCommand(action => ViewModel = new HomeViewModel(),
canExecute => !IsViewModelOfType<HomeViewModel>()); }
}

关于c# - WPF 如何更改 ContentControl 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com