可观察集合绑定到特定项目(按属性值)

时间:2017-08-22 12:53:57

标签: wpf xaml mvvm collections binding

我有一个关于将特定的可观察(或列表)项绑定到我的wpf应用程序中的文本块的问题。通常,您可以绑定特定项目,例如this

但是当你的收藏品增长到(例如)一个巨大的收藏品时。绑定属性如:

Mycollection[14224].Name 
威尔只是变得一团糟。那么是否有另一种绑定方法,它仍然允许我绑定到我的可观察集合中的特定项。但是不是通过集合中项目的索引来实现的。如果是这样,这是怎么做到的?

只是为了更加清晰:

(在'半'伪)

Public class symbol
{
   Public string Name {get; set;}
   Public string Value {get; set;}

   Public symbol(string name, string value)
   {
       this.Name = name;
       this.Value = value;
   }
}

Public class viewmodel : BaseViewModel
{

Public ObservableCollection<Symbol> Symbols{get;set;}

Public viewmodel()
{
Symbols = new ObservableCollection<Symbol>();
Symbols.Add(new symbol("a","a"));
Symbols.Add(new symbol("b","b"));
//..etc etc..

}

}
代码背后的代码:

DataContext = new viewmodel();
xaml中的

<TextBlock Text="{Binding Symbols[0].Value, Mode=TwoWay}"></TextBlock>

我想要的是,绑定到此集合中符号的值。但要通过其名称(字符串属性名称)执行此操作。类似于:

<Textblock Text="Binding Symbols.a.Value, Mode=TwoWay}"></Textblock>

当然,上面的绑定不起作用,但它只是为了向你们展示我在寻找什么。

2 个答案:

答案 0 :(得分:0)

如果绑定到Dictionary<string, string>,您可以按照我的建议在XAML中指定string键:

XAML: Bind IsChecked to list object using an enum to index

不能使用ObservableCollection<Symbol>执行此操作。密钥必须是编译时常量。它不能是您尝试使用绑定或其他内容解析的动态值。 XAML不支持此功能。

答案 1 :(得分:0)

为什么不写一个GetSystemInfo并给它一个标准(例如Name)作为参数。

可以找到基本教程here

如何传递参数是here