我已经在项目设置中定义了一个字符串汇总。我想在Combobox中使用这些值。

有没有办法访问它?

我试过:

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

**** src **是项目的XMLN*

它说:“未找到src:mysettings.default”。

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

我是否有其他我不知道的方法,也许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} 不喜欢。不过,您可能可以编写一个自定义标记扩展程序,但可以获得实例属性。

这对于基于资源的动画方法特别有用,您不严格地说要绑定(这会带来各种可冻结的问题),但是您也不想拥有很多Singleton <sys:double x:Key="MyNumber">50.0</sys:double>S踢开了(或想避免合并的应用程序级资源词典的开销,我认为这不仅是在整个应用程序中实例化一次)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top