我開始在新項目中使用MVVM模式。 一切都很好,但我遇到了以下問題。 實現如下所示: 我有一個MainView,主應用程序窗口。在這個窗口中,我有一個telerik RadGroupPanel,我將其餘的應用視圖作爲標籤進行託管。 視圖模型的其餘部分不知道在MainVIew中託管的RadGroupPanel。 我應該如何正確地將這些視圖從viewModels中的命令添加到RadGroupPanel? 謝謝。MVVM訪問viewmodel中的其他視圖元素
2
A
回答
0
在主窗口視圖模型中,您可以在ObservableCollection中擁有需要添加控件的視圖模型列表。然後,您可以將RadGroupPanel的ItemsSource綁定到該集合,並使用RadGroupPanel的ItemTemplateSelector和ContentTemplateSelector根據綁定的視圖模型選擇要使用的正確模板。
1
您是否考慮過使用接口將視圖注入ViewModel以保持分離?我知道這打破了MVVM,但我已經成功地在許多WPF項目中使用了它。我稱之爲MiVVM or Model Interface-to-View ViewModel。
該模式很簡單。你的用戶控件應該有一個接口,稱它爲IView。然後在視圖模型,你有型IMyView的二傳手屬性,說
然後在視圖中創建一個名爲依賴屬性這
public MyUserControl : IMyView
{
public static readonly DependencyProperty ThisProperty =
DependencyProperty.Register("This", typeof(IMyView), typeof(MyUserControl));
public MyUserControl()
{
SetValue(ThisProperty, this);
}
public IMyView This { get { return GetValue(ThisProperty); } set { /* do nothing */ } }
}
終於在XAML中,你可以注入使用綁定直接查看ViewModel
<MyUserControl This="{Binding InjectedView, Mode=OneWayToSource}"/>
試一試!我已經多次使用這個模式,並且在啓動時獲得了一次注入視圖的接口。這意味着你保持分離(可以測試Viewmodel,因爲IView可以被嘲笑),但是你可以避免許多第三方控件缺乏綁定支持。另外,它的速度很快。你知道綁定使用反射嗎?
在上面的博客鏈接中有一個演示項目展示了這種模式。如果您使用的是第三方控件,我會主張嘗試MiVVM的附加屬性實現。
相關問題
- 1. wpf mvvm ..在viewmodel中訪問視圖元素
- 2. 在MVVM Light中訪問其他視圖模型中的屬性
- 3. MVVM指示燈 - 如何訪問其他視圖中的屬性
- 4. 在MVVM中,誰負責顯示其他視圖,ViewModel或View?
- 5. 訪問其他進程中的元素
- 6. WPF MVVM - 通過ViewModel訪問視圖中DataGrid的DependencyProperty
- 7. MVVM - 視圖能夠知道其他ViewModel的多少?
- 8. Knockout observable/viewmodel可以被其他視圖模型訪問嗎?
- 9. Silverlight與MVVM:如何從視圖訪問ViewModel的事件?
- 10. 訪問其他html頁面的元素?
- 11. ItemsControl DataTemplate中的WPF MVVM訪問元素
- 12. 從Viewmodel訪問視圖
- 13. MVVM更新視圖元素
- 14. NG-點擊訪問其他元素值
- 15. C#從其他線程訪問元素
- 16. 從其他視圖訪問UIView的textview
- 17. 在Android中的其他視圖元素之間插入/刪除視圖元素
- 18. 在視圖中訪問ViewModel屬性
- 19. 訪問視圖模型中的xaml元素和運行時使用WPF mvvm
- 20. 從其他線程訪問視圖(Android)
- 21. 使用子元素訪問其他父元素屬性
- 22. 列表視圖的訪問元素
- 23. datagrid視圖的訪問元素
- 24. 如何訪問視圖的ViewModel
- 25. 在ViewModel中的其他類中是否實現IEventAggregator中斷MVVM?
- 26. 使用MVVM模式時訪問ViewModel
- 27. 使用WPF MVVM從ViewModel訪問Validation.HasError
- 28. 從其他視圖訪問表視圖的按鈕
- 29. 從其包含viewmodel訪問組件viewmodel
- 30. 通用Windows:如何訪問其他頁面中的元素?