我已经定义在项目设置一个StringCollection。 我想在一个ComboBox使用的值。
有没有xamly访问它的方法吗?
我试过了:
<CollectionViewSource Source="{x:Static src:MySettings.Default.MyCollection}" />
<CollectionViewSource
Source="{Binding Source={x:Static src:MySettings.Default.MyCollection}}" />
**** SRC **是该项目的xmlns *
它说:“类型源:MySettings.Default未找到”。
问题是,MySettings是一个类,提供了一个默认的属性,它是MySettings的线程安全的情况下,我真的想从默认属性获取集合,而不是通过实例化一个新的。
是否有其他的方式,我不知道,也许ObjectDataProvider的可以访问的静态对象?
我想,也许我可以在App.xaml中作出这样的返回MySettings.Default这是MySettings类的一个实例,然后访问其所有属性全局资源,我将尝试了这一点,但我更喜欢简单的方法。
我一直用它做X:静态标记扩展 。 关键是要设置为源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>
我找到了这个。 检查出来,希望我不会浪费我的时间......
http://code.msdn.microsoft.com/StaticExExtension
如果你有更好的想法,请让我再知道。
作为扩展到约瑟夫的答案,还可以直接访问个人设置{x:Static }
通过使用静态包装类。 这使得利用设定值,其中绑定行不通的 - 这是不依赖属性最明显的是动画,或属性。
其基本做法是:
public static class XamlSettings
{
public static MySettingsMember { get {return Properties.MySettings.Default.MySettingsMember; }}
}
您然后参考在XAML命名空间中的包装类是在沿着的线下<DoubleAnimation From="{x:Static local:XamlSettings.MySettingsMember}" ... />
作为附录这一点,试图揭露默认直接不起作用,大概是因为它是不是很静态的“足够” -在默认属性实例属性,其中{x:Static}
不喜欢。 你也许可以写一个自定义标记扩展,将获得实例属性,虽然。
这是一个动画基于资源的方法,你不严格地说要绑定(这带来种种冷冻可问题发挥作用)特别有用,但也不是你想要有很多单身的<sys:double x:Key="MyNumber">50.0</sys:double>
小号踢左右(或想避免合并应用程序级别的资源字典,其中我带领相信不只是整个应用程序实例化一次的开销)。