如何从XAML访问MyProject.MySettings.Default.SomeSetting?

2019-10-21 06:28发布

我已经定义在项目设置一个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类的一个实例,然后访问其所有属性全局资源,我将尝试了这一点,但我更喜欢简单的方法。

Answer 1:

我一直用它做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>


Answer 2:

我找到了这个。 检查出来,希望我不会浪费我的时间......

http://code.msdn.microsoft.com/StaticExExtension

如果你有更好的想法,请让我再知道。



Answer 3:

作为扩展到约瑟夫的答案,还可以直接访问个人设置{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>小号踢左右(或想避免合并应用程序级别的资源字典,其中我带领相信不只是整个应用程序实例化一次的开销)。



文章来源: How to access MyProject.MySettings.Default.SomeSetting from xaml?