2010-04-22 27 views
1

我已經在項目設置中定義了一個StringCollection。 我想使用ComboBox中的值。如何從xaml訪問MyProject.MySettings.Default.SomeSetting?

是否有xamly訪問它的方法嗎?

我想:

<CollectionViewSource Source="{x:Static src:MySettings.Default.MyCollection}" /> 
<CollectionViewSource 
    Source="{Binding Source={x:Static src:MySettings.Default.MyCollection}}" /> 

**** SRC **是該項目的xmlns *

它說: 「類型源:MySettings.Default未找到」。

問題是MySettings是一個提供Default屬性的類,它是MySettings的線程安全實例,我真的想從Default屬性獲取集合,而不是通過實例化新的on。

是否有其他的方式,我不知道,也許ObjectDataProvider的可以訪問的靜態對象?

我想,也許我可以在App.xaml中創建一個返回MySettings.Default的全局資源,它是MySettings類的一個實例,然後訪問它的所有屬性,我會嘗試一下,但我更喜歡簡單的方法。

+0

按照它們是在App.config,或其他地方的意義上,這些項目設置? – 2010-04-22 03:18:32

+0

他們是,但我不會從那裏檢索他們。 – Shimmy 2010-04-22 03:22:31

回答

3

我使用x:Static Markup Extension始終做到了。關鍵是要設置源Settings.Default和像這樣的路徑所需的設置:

<Window x:Class="SettingsBindSample.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:s="clr-namespace:SettingsBindSample.Properties" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <CollectionViewSource x:Key="MyItems" 
     Source="{Binding MyCollection, Source={x:Static s:MySettings.Default}}" /> 
    </Window.Resources> 
    <StackPanel> 
     <ComboBox ItemsSource="{Binding Source={StaticResource MyItems}}" /> 
    </StackPanel> 
</Window> 
0

進行了擴展,約瑟夫的答案,也可能與{x:Static }通過使用靜態包裝類直接訪問個人設置。這可以在Binding不起作用的情況下使用設置值 - 最顯着的是動畫,或者不是依賴屬性的屬性。

的基本方法是:

public static class XamlSettings 
{ 
    public static MySettingsMember { get {return Properties.MySettings.Default.MySettingsMember; }} 
} 

你再指在XAML命名空間中的包裝類是沿<DoubleAnimation From="{x:Static local:XamlSettings.MySettingsMember}" ... />線下。

作爲此的附錄,嘗試直接公開Default不起作用,大概是因爲它不夠靜態「足夠」 - Default上的屬性是實例屬性,而{x:Static}不喜歡。儘管如此,您也許可以編寫一個自定義標記擴展來獲取實例屬性。

這對於基於資源的動畫非常有用,您不嚴格地說要綁定動畫(這會帶來各種可凍結的問題),但您也不想擁有大量的單件動畫<sys:double x:Key="MyNumber">50.0</sys:double> s (或者想要避免合併的應用程序級別資源字典的開銷,我認爲這不會僅僅在應用程序中實例化一次)。