如何将(静态)字典绑定到标签
本文关键字:字典 绑定 标签 静态 | 更新日期: 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。
您需要使用一个转换器,该转换器将允许您通过ConverterParameter
从Dictionary
中提取值。
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 = ... } "