如何将(静态)字典绑定到标签

本文关键字:字典 绑定 标签 静态 | 更新日期: 2023-09-27 18:19:33

我有一个静态字典

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

这个字典包含我想在网格控件中显示的数据:

<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.)我想将指定键的值绑定到标签的内容属性。

如何做到这一点?

如何将(静态)字典绑定到标签

要访问Dictionary,您必须执行以下操作(如果您的DataContext还不是X的实例):

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

要访问字典中的值,绑定必须如下所示:

<Label Content="{Binding MyDict[key]}" />

您的绑定需要更改为以下内容:

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

如果您查看MSDN中的绑定路径,您会发现可以在XAML中指定字符串索引器。local将是表示X所在的命名空间的xmlns。

您需要使用一个转换器,该转换器将允许您通过ConverterParameterDictionary中提取值。

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}"

我投票支持Aaron作为转换器,Tobias作为索引器,但要真正访问静态字典,请尝试在实例级别复制属性并绑定到

// Code
class X 
{ 
    protected static Dictionary<string,string> StaticDict { get { ... } } 
    public Dictionary<string, string> InstanceDict { get { return StaticDict; } } 
} 
// Xaml
Content="{Binding InstanceDict, Converter = ... } "