2016-12-13 44 views
0

我們目前有一個可配置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。

我們沒有清晰的眼光,我們想要什麼。最後,我們可以使用我們目前的方法,它會起作用。我們需要的是從外部來源定義最終窗口中的元素,而無需重新編譯整個應用程序。

所以我問的是我們有什麼選擇,有沒有任何「標準化」的方式或框架。你知道關於這個話題的任何文章或書籍嗎?或者我們應該堅持最簡單的方法,只隱藏我們不想要的東西?

謝謝

+0

看看[AvalonDock](https://avalondock.codeplex.com/) –

+0

在我的WPF項目中,我使用了Prism + Regions,其中每個模塊都可以添加一些UI部件。如果你不想顯示一些功能,你不應該加載模塊。 – tym32167

+0

*「我們覺得這不是一個很好的方法來隱藏元素」*:如果沒有具體的性能問題,請不要擔心。但是,一個「正確的」MVVM解決方案就是將你的模塊實現爲視圖模型,這將是主視圖模型的屬性(或者它們位於主虛擬機擁有的一個集合中)。主視圖顯示在ContentControl或ItemsControl中,每個模塊都有一個隱含的「DataTemplate」。如果一個模塊「MainVM.Foo」被隱藏,這意味着'MainVM.Foo'返回'null'。或者你從'ObservableCollection MainVM.ChildCollections'中移除它。 –

回答

1

你作爲我能理解你是一個模塊化的應用程序開發之後。所以我可以建議你看看下面的話題; 模塊化應用開發在互聯網中使用Prism。例如,通過這種方法,您可以使用PRISM發現機制(它使用app.config文件來定義模塊)來構建整個用戶界面。這裏有幾個可能的鏈接:

  1. Building an Extensible Application with MEF, WPF, and MVVM
  2. Modular Application Development Using Prism Library 5.0 for WPF
  3. A MEF explanation topic

如果您需要更多解釋,請告知我。

此致敬禮。