【发布时间】:2014-11-14 14:04:37
【问题描述】:
我对 WPF 开发很陌生,目前我正在尝试在我的应用程序开发中使用 MVVM。我已经阅读了很多关于 MVVM 导航和切换视图的信息,但是我找不到适合我当前情况的解决方案。让我们解释一下它是什么: 首先,我有我的主视图元素,一个 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(视图和视图模型已实现,使用 RelayCommand 和 INotifyPropertyChanged)在单击按钮后打开一个对话框,在选择文件后打开并解析它,并显示 ListView 中的所有找到的元素多项选择(在这种情况下,有数据的人)。 我现在要做的是在单击按钮时在此 ContentControl 中加载另一个用户控件。这个按钮在我的视图模型中定义如下:
public ICommand LoadPersons
{
get { return new RelayCommand(param => this.loadSelectedPersons(), param => (SelectedPersons!=null && SelectedPersons.Any()));}
}
我的问题出现在这一点上,如何修改 ContentControl 的内容,直接从我的视图模型加载另一个用户控件而不是当前的用户控件(在这个“this.loadSelectedPersons()”中)? 如果这是不可能的,我应该如何解决这个问题? 在此操作旁边,我想显示所有先前选择的元素并以不同的可能方式进行操作(插入数据库,保存在另一个文件中等等),并且我已经有了合适的用户控件,我想要在 ContentControl 部分的主视图元素中显示,其他元素保持原样。
【问题讨论】:
-
每次访问该属性时都返回一个新的 ICommand?这根本不对。
标签: c# wpf mvvm view navigation