Как получить доступ к MyProject.MySettings.Default.SomeSetting из xaml? - PullRequest
1 голос
/ 22 апреля 2010

Я определил StringCollection в настройках проекта. Я хочу использовать значения в ComboBox.

Есть ли способ получить к нему доступ 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, и затем получить доступ ко всем его свойствам, я попробую это, но я предпочитаю способ.

Ответы [ 3 ]

3 голосов
/ 22 апреля 2010

Я всегда делал это, используя 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>
0 голосов
/ 19 марта 2015

В качестве дополнения к ответу Джозефа также можно получить доступ к отдельным настройкам напрямую с помощью {x:Static } с помощью класса статической обертки. Это позволяет использовать значения параметров, при которых привязка не будет работать, особенно анимации или свойства, которые не являются свойствами зависимости.

Основной подход:

public static class XamlSettings 
{
     public static MySettingsMember { get {return Properties.MySettings.Default.MySettingsMember; }}
}

, к которому вы затем обращаетесь в XAML под пространством имен, в котором находится класс-оболочка, в соответствии с <DoubleAnimation From="{x:Static local:XamlSettings.MySettingsMember}" ... />.

В качестве дополнения к этому, попытка выставить Default напрямую не работает, возможно потому, что она не вполне «статична» - свойства по умолчанию - это свойства экземпляра, которые {x:Static} не нравятся. Возможно, вы могли бы написать собственное расширение разметки, которое бы получало свойства экземпляра.

Это особенно полезно для основанного на ресурсах подхода к анимации, когда вы, строго говоря, не хотите связывать (который вводит в игру всевозможные проблемы с замораживанием), но при этом вы не хотите иметь много одиночных <sys:double x:Key="MyNumber">50.0</sys:double> что-то вроде (или хотите избежать накладных расходов на объединенный словарь ресурсов уровня приложения, который, как я считаю, не просто создается один раз в приложении).

0 голосов
/ 22 апреля 2010

Я нашел это.Проверяя, надеюсь, я не трачу свое время ...

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

Если у вас есть идеи получше, пожалуйста, дайте мне знать.

...