【问题标题】:Observable collection bind to specific item (by property value)Observable 集合绑定到特定项目(按属性值)
【发布时间】:2018-01-30 18:37:32
【问题描述】:

我有一个关于将特定可观察(或列表)项绑定到我的 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();

在xml中:

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

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

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

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

【问题讨论】:

  • 我无法想象会发生绑定Mycollection[14224] 的情况。对于集合 wpf 有 ItemsControl
  • 如果您的集合中有特殊的魔法物品需要单独绑定,您的视图模型应该将它们作为单个属性公开。如果要在 XAML 中复制和粘贴 14,224 个 TextBlock,则需要听取 ASh 的建议并使用 ItemsControl。

标签: wpf xaml mvvm collections binding


【解决方案1】:

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

基础教程见here

如何传递参数是here

【讨论】:

    【解决方案2】:

    如果您绑定到 Dictionary&lt;string, string&gt;,您可以在 XAML 中指定 string 键,正如我在此建议的那样:

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

    不能使用ObservableCollection&lt;Symbol&gt; 执行此操作。并且键必须是编译时常量。它不能是您尝试使用绑定或其他东西解析的动态值。这在 XAML 中不受支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多