【问题标题】:Wpf Binding filterationWpf 绑定过滤
【发布时间】:2009-09-11 14:06:01
【问题描述】:

我对绑定文本框有疑问。他的场景是这样的。我有一个数据集说,

DataTable dt=new DataTable();
dt.TableName = "table";
dt.Columns.Add("mode", typeof(int));
dt.Columns.Add("value", typeof(int));
DataRow dr = dt.NewRow();
dr["mode"] = 1;
dr["value"] = 1000;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["mode"] = 2;
dr["value"] = 2000;
dt.Rows.Add(dr);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
this.DataContext = ds;

窗口绑定到这个数据集。我的窗口中有文本框,我想将它绑定到 mode=1 的行,以便我可以在我的文本框的文本属性中显示该行值。

如何应用此绑定..?

任何意见都会非常有帮助

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

    DataSet 在 WPF 中用于绑定有点通用。它通常更容易使用M-V-VM 模式,其中您的模型是 INotifyPropertyChanged 或 UI 绑定的 DependencyObjects。

    我不确定您是在谈论根据“模式”更改绑定的内容,还是您只是想过滤“模式” 。”

    在第一种情况下,您必须在样式上使用 DataTrigger 才能根据模式字段的值更改您正在使用的 ContentTemplate。对于初学者或中级用户来说,这不是一个简单的概念。

    This is a decent blog post with instructions on how to accomplish this. 同样,它非常令人困惑,当它不起作用时,有时很难排除故障。

    在第二种情况下,最好将 DataContext 设置为包含多个预先过滤的 DataTable 的类型。过滤不是 UI 的工作,而是代码的工作。它可能看起来像:

    public class MyDataContext
    {
      public DataTable ModeOne {get;set;}
      public DataTable ModeTwo {get;set;}
    }
    

    或许

    public class MyDataContext
    {
      public Dictionary<int, DataTable> TableByMode {get;set;}
    }
    

    你会像这样绑定的地方

    <ItemsControl Content="{Binding TableByMode[1]}">
    

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多