【问题标题】:How to bind to this dictionary entry?如何绑定到这个字典条目?
【发布时间】:2015-12-25 02:00:31
【问题描述】:

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

<Unit Name="Mass" Factor="1" Display="kg"/>
<Unit Name="MassPU" Factor="0.001" Display="kg/m"/>

这些数据被读入这样的字典:

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);

然后我有这样的 C# 代码(以及其中的其他内容):

namespace mySpace
{  
    public static class Formatter
    {
       public enum MUnits {Mass = 0, Force, .... etc };
        public static Dictionary<string, Unit> Units { get; set; } 
    }
}

现在我需要将 XAML 文本标签绑定到 Units 元素,如下所示:

<Label         
     Content="{Binding Source={x:Static c:Formatter.Units[Mass].Display}}"/>

它认为Mass是一个意想不到的象征,.也是。

DataContext 没有设置为 Formatter,而是设置为 ViewModel,顺便说一句。

问题:绑定必须是什么样的? (XAML 应显示“kg”。)

【问题讨论】:

  • 为什么不创建单位的 ObservableCollection?字典根本不适合绑定。
  • 我会使用 ValueConverter 来获取字典元素

标签: c# wpf xaml binding


【解决方案1】:

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 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; }
}

【讨论】:

    猜你喜欢
    • 2013-08-11
    • 2012-02-29
    • 2017-12-23
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多