gpt4 book ai didi

c# - 在 WPF/MVVM 上导航/加载不同的 View

转载 作者:行者123 更新时间:2023-12-03 10:28:10 25 4
gpt4 key购买 nike

我对 WPF 开发很陌生,目前我正在尝试在我的应用程序开发中使用 MVVM。我已经阅读了很多关于 MVVM 导航和切换 View 的内容,但我找不到适合我当前情况的解决方案。让我们解释一下它是什么:
首先,我有我的主 View 元素,一个 Dockpanel,有一些固定区域,以及一个内容应该改变的主要“动态”区域,具体取决于操作:

<DockPanel>
<Label Content="Top Fixed element"/>
<StackPanel Orientation="Vertical" Height="auto" Width="150" DockPanel.Dock="Left">
<Label Content="SomeOptions"/>
<!-- some more elements -->
</StackPanel>
<Label DockPanel.Dock="Bottom" Content="Foot"/>
<ContentControl Content="{Binding CurrentMainViewElementViewModel}"/>
</DockPanel>

我已经定义了一些我想在这个 ContentControl 中加载的数据模板,这里有一个数据模板作为示例:
<Window.Resources>
<DataTemplate DataType="{x:Type ViewModel:FileLoaderVM}">
<View:FileLoaderView/>
</DataTemplate>
</Window.Resources>

这个 FileLoader( View 和 View 模型是使用 RelayCommand 和 INotifyPropertyChanged 实现的)在单击按钮后打开一个对话框,在选择文件后打开并解析它,并在 ListView 中显示所有找到的元素,并带有多个选择(在这种情况下,有数据的人)。
我现在要做的是在单击按钮时在此 ContentControl 中加载另一个用户控件。这个按钮在我的 View 模型中定义如下:
public ICommand LoadPersons
{
get { return new RelayCommand(param => this.loadSelectedPersons(), param => (SelectedPersons!=null && SelectedPersons.Any()));}
}

我的问题出现在这一点上,如何修改 ContentControl 的内容,直接从我的 View 模型加载另一个用户控件而不是当前的用户控件(在这个“this.loadSelectedPersons()”中)?
如果这是不可能的,我应该如何解决这个问题?
在此操作旁边,我想显示所有先前选择的元素并以不同的可能方式进行操作(插入数据库,保存在另一个文件中等等),并且我已经有了合适的用户控件,我想要在 ContentControl 部分的主视图元素中显示,保持其他元素原样。

最佳答案

让我们看看我是否正确。

您有一个主视图模型,其属性 (CurrentMainViewElementViewModel) 绑定(bind)到 ContentControl。您的 MainViewmodel 将 FileLoaderVM 设置为此属性。现在您想在 FileLoaderVM 中选择文件时显示“新/其他” View 模型?

为什么不简单地从 FileLoaderVM 公开一个事件并在 MainViewModel 中订阅该事件?如果您这样做,您的 MainViewModel 可以将“新/其他” View 模型设置为 ContentControl

关于c# - 在 WPF/MVVM 上导航/加载不同的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26931765/

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