Как привязать (статический) словарь к меткам? - PullRequest
4 голосов
/ 06 января 2012

У меня есть статический словарь

class X { static Dictionary<string,string> MyDict {get { ... }} }

Этот словарь содержит данные, которые я хочу показать в Grid-Control:

<Grid>
  <!-- Row and Column-Definitions here -->
  <Label Grid.Row="0" Grid.Column="0" Content="{Binding MyDict.Key=="foo" }" ToolTip="foo" />
  <!-- some more labels -->
</Grid>

1.) Я не знаю, как получить доступ (в xaml) к словарю

2.) Я хочу привязать значение указанного ключа к свойству Content-Label.

как это сделать?

Ответы [ 4 ]

4 голосов
/ 06 января 2012

Ваша привязка должна измениться следующим образом:

Content="{Binding Path=[foo], Source={x:Static local:X.MyDict}}"

Если вы посмотрите на Пути привязки из MSDN, вы увидите, что в XAML могут быть указаны строковые индексаторы,local будет xmlns, представляющим пространство имен X, в котором он находится.

4 голосов
/ 06 января 2012

Чтобы получить доступ к Словарю, вы должны сделать что-то вроде этого (если ваш DataContext уже не является экземпляром X):

<Grid>
    <Grid.DataContext>
        <X xmlns="clr-namespace:Your.Namespace" />
    </Grid.DataContext>
    <!-- other code here -->
</Grid>

Чтобы получить доступ к значениям в словаре,Ваша привязка должна выглядеть следующим образом:

<Label Content="{Binding MyDict[key]}" />
3 голосов
/ 06 января 2012

Вам необходимо использовать конвертер , который позволит вам извлечь ваше значение из Dictionary через ConverterParameter.

public class DictConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Dictionary<string,string> data = (Dictionary<string,string>)value;
        String parameter = (String)parameter;
        return data[parameter];
    }
}

XAML будет выглядеть следующим образом...

<Window.Resources>
    <converters:DictConverter x:Key="MyDictConverter"/>
</Window.Resources>

Content="{Binding MyDictProperty, Converter={StaticResource MyDictConverter}, ConverterParameter=foo}"
0 голосов
/ 06 января 2012

Я проголосовал за Аарона за конвертер и Тобиаса за индексаторы, но чтобы получить доступ к статическому словарю , попробуйте продублировать свойство на уровне экземпляра и связать его с

// Code
class X 
{ 
    protected static Dictionary<string,string> StaticDict { get { ... } } 
    public Dictionary<string, string> InstanceDict { get { return StaticDict; } } 
} 

// Xaml
Content="{Binding InstanceDict, Converter = ... } "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...