C# 如何绑定到此词典条目?
我有一个XML文件,其中包括: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
<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; }
}