C# 以x:Name作为键绑定到字典的WPF

C# 以x:Name作为键绑定到字典的WPF,c#,.net,wpf,xaml,mvvm,C#,.net,Wpf,Xaml,Mvvm,如果我的问题不清楚,请改正。我要找的是 这是一本字典的装订示例。。。它的工作原理是: <TextBlock Text="{Binding Path=MyDictionary[ThisIsKeyInMyDict]}" /> 我正在寻找: <TextBlock x:Name="Id" Text="{Binding Path=MyDictionary[x:Name]}" /> 看到了吗?我想在字典中查找一个键,与此控件的“Name”相同 谢谢你的帮助 您可以对其使用

如果我的问题不清楚,请改正。我要找的是

这是一本字典的装订示例。。。它的工作原理是:

<TextBlock Text="{Binding Path=MyDictionary[ThisIsKeyInMyDict]}" />

我正在寻找:

<TextBlock x:Name="Id" Text="{Binding Path=MyDictionary[x:Name]}" />

看到了吗?我想在字典中查找一个键,与此控件的“Name”相同


谢谢你的帮助

您可以对其使用多重绑定:

   <Window.Resources>
        <local:DictValueConverter x:Key="dictValCnv"/>        
    </Window.Resources>
<TextBlock.Text>
    <MultiBinding Converter="{StaticResource dictValCnv}">
        <Binding Path="MyDictionary"/>
        <Binding RelativeSource="{RelativeSource Self}" Path="Name"/>
    </MultiBinding>
</TextBlock.Text>


using System;
using System.Globalization;
using System.Linq;
using System.Windows.Data;
public class DictValueConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values==null || values.Length<2 )
        {
            return false;
        }

        var dict = values[0] as IDictionary;
        if(dict.Contains(values[1]))
    {
        return dict[values[1]];
    }
        return "KeyNotFound";
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

使用制度;
利用制度全球化;
使用System.Linq;
使用System.Windows.Data;
公共类DictValueConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{

如果(values==null | | values.length)您是否尝试过
Text=“{Binding Path=MyDictionary[x:;Name]}”
?冒号是一个特殊字符,可能需要转义。我的代码嗅觉很刺痛……这是一个X/Y问题。你有一个目标,但你尝试使用的方法不正确/比推荐的模式更难使用。绑定字典是代码嗅觉的一部分(啊,不请)。如果你能清楚地描述你正在尝试做什么,你可能会得到一个更好的答案。如果你创建了一个完全精简的原型应用程序来演示你正在尝试做什么(),你会得到最好的答案。@Will谢谢你的建议!我在这里问了一个稍微复杂一点的问题:这个问题的范围缩小了,在这里添加了更多细节。