如何访问XAML的myproject.mysettings.default.somesetting?
-
30-09-2019 - |
题
我已经在项目设置中定义了一个字符串汇总。我想在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>
其他提示
作为约瑟夫答案的扩展,也可以直接访问单个设置 {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踢开了(或想避免合并的应用程序级资源词典的开销,我认为这不仅是在整个应用程序中实例化一次)。