wpf将标签内容绑定到已排序的列表条目

时间:2016-06-21 16:21:55

标签: c# wpf c#-4.0

不确定这是否可行。我试图将标签内容绑定到全局排序列表条目。

public class AppObj
{
  public static SortedList<string, string> Messages { get; set; }
  ......
}

AppObj.Messages = new SortedList<string, string>();
foreach (DictionaryEntry entry in entries)
{
  string key = entry.Key.ToString();
  string value = (string)entry.Value;
  if (AppObj.Messages.ContainsKey(key)) { AppObj.Messages.Add(key, value); }
  else { AppObj.Messages[key] = value; }
}

在xaml

<Label Content="{Binding AppObj.Messages["mykey"]}" />

[]内的双引号给出了错误。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用IValueConverter。 SO帖子here显示了一个转换器,它对Dictionary做了类似的工作。将其修改为期望SortedList,它看起来像这样:

public class SortedListConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        SortedList<string, string> data = (SortedList<string, string>)value;
        String parame = (String)parameter;
        return data[parame];
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

将此添加到您的窗口资源:

 <local:SortedListConverter x:Key="cvtr"/>

然后像这样绑定:

<Label Content="{Binding Source={StaticResource AppObj}, 
    Path=Messages,  
    Converter={StaticResource cvtr}, 
    ConverterParameter=key}" />

答案 1 :(得分:1)

如果示例中的mykey是硬编码的密钥名称,则只需创建一个属性,该属性将链接公开给密钥&#34; mykey&#34;的数据。然后只需绑定到该属性。

 public string ViewableMessage { return AppObj.Messages["mykey"]; }

<强>的Xaml

 <Label Content="{Binding ViewableMessage }" />