我對WPF開發很陌生,目前我正在嘗試在我的應用程序開發中使用MVVM。我已經閱讀了很多有關MVVM導航和切換視圖的內容,但我無法找到適合當前情況的解決方案。讓我們來解釋一下它是什麼:所有的 首先,我有我的主要景觀元素,DockPanel中,有一些固定的區域,主「動」區裏的內容應視行爲改變,:導航/加載WPF/MVVM上的不同視圖
<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>
我已經定義了一些的DataTemplates,我想在這個ContentControl中加載,這裏有該數據模板中的一個作爲例子:
<Window.Resources>
<DataTemplate DataType="{x:Type ViewModel:FileLoaderVM}">
<View:FileLoaderView/>
</DataTemplate>
</Window.Resources>
這FileLoader(查看和瀏覽模式的實施,使用RelayCommand和INotifyPropertyChanged的)單擊按鈕後會打開一個對話框,其中選擇文件後會打開並解析該文件,然後執行sh所有在ListView中找到的具有多個選擇的元素(在這種情況下,具有其數據的人員)。 我現在要做的是在單擊按鈕時在此ContentControl中加載另一個用戶控件。此按鈕在我的視圖模型定義如下:
public ICommand LoadPersons
{
get { return new RelayCommand(param => this.loadSelectedPersons(), param => (SelectedPersons!=null && SelectedPersons.Any()));}
}
我的問題來了,在這一點上,我怎麼能修改ContentControl中的內容,直接從我的視圖模型加載另一個用戶控制,而不是當前的(在這個「this.loadSelectedPersons()」)? 如果這是不可能的,我該如何解決這個問題? 在這個動作旁邊,我想要顯示所有先前選擇的元素並以不同的可能方式進行操作(插入到數據庫中,保存在另一個文件等中),並且我已經爲此提供了相應的用戶控件,喜歡在我的ContentControl部分的主視圖元素中顯示,保持原來的其他元素。
您每次訪問該屬性時都返回一個新的ICommand?這根本不對。 – Will 2014-11-14 14:40:36