Wpf结合过滤

时间:2009-09-11 14:06:01

标签: wpf binding

我怀疑绑定了一个文本框。我的情况是这样的。我有一个数据集说,

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的行,这样我就可以在我的文本框的text属性中显示行值。

我如何应用此绑定..?

任何输入都非常有用

1 个答案:

答案 0 :(得分:1)

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

我不确定你是在谈论根据“模式”改变哪些内容,或者你只是想在“模式”中过滤 。“

在第一种情况中,您必须在Style上使用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]}">