1

我在项目设置中定义了一个 StringCollection。我想使用组合框中的值。

有没有办法访问它xamly?

我试过:

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

****src** 是项目的xmlns*

它说:“类型 src:MySettings.Default 未找到”。

问题是 MySettings 是一个提供 Default 属性的类,它是 MySettings 的线程安全实例,我真的想从 Default 属性中获取集合,而不是通过实例化一个新的。

还有其他我不知道的方法,也许 ObjectDataProvider 可以访问静态对象?

我想,也许我可以在 App.xaml 中创建一个返回 MySettings.Default 的全局资源,它是 MySettings 类的一个实例,然后访问它的所有属性,我会尝试一下,但我更喜欢简单的方法。

4

2 回答 2

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>
于 2010-04-22T05:08:01.363 回答
0

作为约瑟夫答案的扩展,也可以{x:Static }通过使用静态包装类直接访问各个设置。这允许在绑定不起作用的情况下使用设置值 - 最值得注意的是动画或不是依赖属性的属性。

基本方法是:

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>(或想要以避免合并的应用程序级资源字典的开销,我被引导相信它不仅仅是在应用程序中实例化一次)。

于 2015-03-19T12:42:29.343 回答