我有一本测试词典
MyDict = new Dictionary<string, Uri>
{
{"First", new Uri("alma.jpg", UriKind.Relative)},
{"Second", new Uri("korte.jpg", UriKind.Relative)}
};
和一个简单的 XAML
<TextBlock Text="{Binding MyDict[First]}"
FontSize="13" Width="200" Height="30" />
这完美地显示了第一个关键元素值
我想要的是
我有一个字符串变量:DictKey
让 DictKey="First"
如何重写 XAML 以使用此变量
<TextBlock Text="{Binding MyDict[???DictKey????]}"
FontSize="13" Width="200" Height="30" />
谢谢。
最佳答案
我假设你有一些属性(property)DictKey
它持有项目的关键。
您可以使用 MultiBinding
并将第一个绑定(bind)设置为您的字典属性,并将第二个绑定(bind)设置为具有项目键的属性:
<TextBlock FontSize="13" Width="200" Height="30">
<TextBlock.Text>
<MultiBinding>
<MultiBinding.Converter>
<local:DictionaryItemConverter/>
</MultiBinding.Converter>
<Binding Path="MyDict"/>
<Binding Path="DictKey"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
转换器使用这两个值从字典中读取项目:
public class DictionaryItemConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values != null && values.Length >= 2)
{
var myDict = values[0] as IDictionary;
var myKey = values[1] as string;
if (myDict != null && myKey != null)
{
//the automatic conversion from Uri to string doesn't work
//return myDict[myKey];
return myDict[myKey].ToString();
}
}
return Binding.DoNothing;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
关于wpf 字典绑定(bind),其中 key=variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13799705/