C# 如何绑定到此词典条目?

C# 如何绑定到此词典条目?,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我有一个XML文件,其中包括: <Unit Name="Mass" Factor="1" Display="kg"/> <Unit Name="MassPU" Factor="0.001" Display="kg/m"/> 然后我有这样的C#代码(其中包括其他内容): 名称空间mySpace { 公共静态类格式化程序 { 公共弹药{质量=0,力等}; 公共静态字典单元{get;set;} } } 现在我需要将XAML文本标签绑定到Units元素,如下所示: For

我有一个XML文件,其中包括:

<Unit Name="Mass" Factor="1" Display="kg"/>
<Unit Name="MassPU" Factor="0.001" Display="kg/m"/>
然后我有这样的C#代码(其中包括其他内容):

名称空间mySpace
{  
公共静态类格式化程序
{
公共弹药{质量=0,力等};
公共静态字典单元{get;set;}
}
}
现在我需要将XAML文本标签绑定到Units元素,如下所示:

Formatter.Units = (data.Descendants("Unit").Select(x => new Unit
          (
           x.Attribute("Name").Value,
           x.Attribute("Display").Value,
           Convert.ToDouble(x.Attribute("Factor").Value)
          )
       ) ToList()).ToDictionary(x => x.Name, x => x);
<Label         
     Content="{Binding Source={x:Static c:Formatter.Units[Mass].Display}}"/>

它认为质量是一个意外的标记,也是

顺便说一句,DataContext未设置为格式化程序,而是设置为视图模型

问题:装订必须是什么样子? (XAML应显示“kg”。

XAML:

<Window.DataContext>
    <local:MyViewModel/>
</Window.DataContext>
<Grid>
    <Label x:Name="label1"  Content="{Binding MyFormatter[Mass].Display}" Width="300" FontSize="18.667" Margin="95,10,123.4,232.8"/>
    <Label x:Name="label2"  Content="{Binding MyFormatter[MassPU].Display}" Width="300" FontSize="18.667" Margin="95,93,123.4,157.8"/>
</Grid>
格式化程序:

public class Formatter : Dictionary<string, Unit>
{
    public Formatter()
    {
        Add("Mass", new Unit { Name = "Mass", Display = "Kg", Factor = 1 });
        Add("MassPU", new Unit { Name = "MassPU", Display = "Kg/m", Factor = 0.001 });
    }
}

为什么不创建可观察的单位集合?Dictionary根本不适合绑定。我会使用ValueConverter来获取Dictionary元素
public class MyViewModel
{
    public Formatter MyFormatter { get; set; }

    public MyViewModel()
    {
        MyFormatter = new Formatter();
    }
}
public class Formatter : Dictionary<string, Unit>
{
    public Formatter()
    {
        Add("Mass", new Unit { Name = "Mass", Display = "Kg", Factor = 1 });
        Add("MassPU", new Unit { Name = "MassPU", Display = "Kg/m", Factor = 0.001 });
    }
}
public class Unit
{
    public string Name { get; set; }
    public string Display { get; set; }
    public double Factor { get; set; }
}