【问题标题】:Can we use Where clause in WPF Binding in code behind?我们可以在后面的代码中使用 WPF Binding 中的 Where 子句吗?
【发布时间】:2015-08-15 17:09:53
【问题描述】:

我有一个场景,我想在后面的代码中创建一个 Binding 对象,然后将它连接到 datagrid 列。像这样的:

int i = 5; // Will get this value from some other object

Binding b = new Binding("Customers.where(c => c.CustomerId == " + i + ").ToList()[0].OrderValue");  // how to make this work ?

telerikGridView.Columns.Add(
    new Telerik.Windows.Controls.GridViewDataColumn
        {
            Header = "Customer",
            DataMemberBinding = b
        }
    );

我看到另一个post 建议我可以使用转换器或者我应该创建一个自定义绑定类。但转换器也不工作。

我在这里错过了一些非常琐碎的事情吗?

【问题讨论】:

  • 创建一个具有可观察集合的属性,该集合将包含 "Customers.where(c => c.CustomerId == " + i + ").ToList()[0].OrderValue");然后将其绑定到拥有此属性的视图模型。将 MVVM 用于 WPF 而不是代码隐藏
  • 好吧,我实际上做不到。这是要求的一部分,我可以将任意数量的客户添加到这里的 DataContext 类中。
  • 我不明白你为什么不能。如果您想在类之间共享数据,请给它们一个通用接口。
  • 所以这个客户的集合实际上包含了我可能会继续添加到类中的客户(即 datacontext),而我可以添加的客户数量是未定义的
  • 好的,所以通知/更新类关于添加的不同数量的元素。看看这里en.wikipedia.org/wiki/Observer_pattern

标签: c# .net wpf xaml


【解决方案1】:

在您的类上创建一个 Observable 集合,然后创建一个属性更改事件,然后在该事件上操作您的数据(where 子句)然后绑定它。

var coll = viewModel.GetPropertyValue("Customers") as ObservableCollection<Customers>;
coll += CustomerPropertychange_Event;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2017-05-07
    • 1970-01-01
    • 2011-11-29
    相关资源
    最近更新 更多