2010-11-22 79 views
0

理想情況下,我希望在應用程序類中放置一些屬性,以便我的WPF應用程序在窗口,對話框,控件等之間共享。從其他WPF組件引用這些屬性很簡單或者我應該讓他們靜態更容易訪問?從WPF中的窗口類引用應用程序類屬性

回答

1

在我看來,在App類放置屬性的最大問題是你的代碼將緊密耦合。此外,這些屬性可能超出了App類的範圍。

如果您不關心模式,即您的應用程序不會增加複雜性,那麼在App類中使用屬​​性可能是一個快速而簡單的解決方案。但是,如果你在一個已經很複雜(或不斷增長)的代碼中這樣做,它可能會導致你很頭疼。

如果通過將屬性設置爲靜態,則意味着將它們放在某個類中並在另一個類中引用它,則會得到不太緊密的代碼,但不夠鬆散。

+0

所以我認爲應用程序類並不意味着以我現在提議的方式使用。我認爲在該類中放置一些屬性是很好的,以便其他窗口可以訪問信息,但我認爲你可能是對的。這不是一個大的應用程序,但我希望通過使用良好的做法儘可能保持一致。 – jlafay 2010-11-22 19:24:54

1

如果您在App類公開屬性,你可以聲明通過設置的DataContext綁定到這些屬性:

DataContext="{x:Static Application.Current}" 

我然而,隨着愛德華同意,你要結束了緊耦合到您的應用程序實現。您可以通過定義一個靜態類來緩解這種情況,但可以爲您的視圖創建視圖模型,這些模型在內部使用您的靜態類來檢索綁定的值。

如果你的大多數屬性都是字符串,你可以在你的應用程序的資源定義它們(要做到這一點,你需要的資源從內部到公共改變)和靜態訪問它們像這樣:

<Window 
    x:Class="MyApp.Shell" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" 

    xmlns:properties="clr-namespace:MyApp.Properties" 

    Title="{x:Static properties:Resources.Shell_Title}" WindowStartupLocation="CenterScreen" WindowState="Normal" 
></Window>