我們已經爲我們的WPF應用程序提供了一個現有的UI,其中單獨的按鈕按下時會顯示基於綁定到可見性(MVVM)的元素,其中ICommand會將這些可見性屬性設置爲開或關。這些工作很好,但最近我們被要求按按鈕來顯示/隱藏像以前一樣的元素,但另一種類型的按鈕按下來顯示一些其他元素,但在一個TabControl中。ViewModel中的UIElement的UserControl會打破MVVM?
我想這樣做是的方式:
a)創建包含這取決於按鈕按下這些用戶控件通過視圖模型實例化這些元素
B)在運行時間期間單獨用戶控件,並結合到在查看的ItemsSource通過一個ObservableCollection:
視圖模型:
private ObservableCollection<Object> centerView;
public ObservableCollection<Object> CenterView
{
get { return centerView; }
}
...
UserControlOfReportRelatedElements reportsView = new UserControlOfReportRelatedElements();
CenterView.Clear();
Grid.SetRow(reportsView, 0);
CenterView.Add(reportsView);
XAML:
<ItemsControl ItemsSource="{Binding CenterView}" Grid.Row="2">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
所以取決於用戶控件是否被包裹在一個TabControl,我們將簡單地滑它在的ObservableCollection(運行時)。
這個工程,它很方便。但是這會打破MVVM嗎?還有什麼我們可以做的嗎?
ContentControl旨在支持問題正在討論的情況,當與您在答案中提到的技術結合使用時。 – user3690202
我從這個答案中學到了很多東西,但是我與TomTom一起工作,因爲在這一點上實現起來要容易得多。謝謝你。我會這樣想下去 – Tyress
@Tayress我實際上認爲我們都指的是同一件事;) – poke