我們目前有一個可配置UI的基本實現,但我們覺得這不是最好的方法。我們正在開發另一個需要從外部文件配置的應用程序,我們想知道是否有更好的方法來做到這一點。WPF - 可配置UI
我們目前有xml文件,其元素的名稱和可用性直接轉換爲可見性。當元素爲available="false"
時,我們用visibility="collapsed"
隱藏元素。元素包含在帶有名稱的Setup元素中。有單獨的配置文件和我們想要加載的設置名稱。
<Setup name="All">
<Element name="toolBarDrawingTools" available="true"/>
...
</setup>
<Setup name="Operator">
<Element name="toolBarDrawingTools" available="false"/>
...
</setup>
它工作得很好,但我們覺得這不是一個很好的方法來隱藏元素。更好的方法可能是創建和添加我們需要的元素。佈局應該不是什麼大問題,因爲大多數元素都是將被添加到StackPanel的ToolBars,MenuItems或UserControls。所以沒有複雜的元素定位。我們還發現,使用XAML代碼定義xml文件並在運行時將其轉換爲可視元素。我們不需要那麼複雜。我們有一組我們想要動態添加的UserControl。
我們沒有清晰的眼光,我們想要什麼。最後,我們可以使用我們目前的方法,它會起作用。我們需要的是從外部來源定義最終窗口中的元素,而無需重新編譯整個應用程序。
所以我問的是我們有什麼選擇,有沒有任何「標準化」的方式或框架。你知道關於這個話題的任何文章或書籍嗎?或者我們應該堅持最簡單的方法,只隱藏我們不想要的東西?
謝謝
看看[AvalonDock](https://avalondock.codeplex.com/) –
在我的WPF項目中,我使用了Prism + Regions,其中每個模塊都可以添加一些UI部件。如果你不想顯示一些功能,你不應該加載模塊。 – tym32167
*「我們覺得這不是一個很好的方法來隱藏元素」*:如果沒有具體的性能問題,請不要擔心。但是,一個「正確的」MVVM解決方案就是將你的模塊實現爲視圖模型,這將是主視圖模型的屬性(或者它們位於主虛擬機擁有的一個集合中)。主視圖顯示在ContentControl或ItemsControl中,每個模塊都有一個隱含的「DataTemplate」。如果一個模塊「MainVM.Foo」被隱藏,這意味着'MainVM.Foo'返回'null'。或者你從'ObservableCollection MainVM.ChildCollections'中移除它。 –