【发布时间】:2015-09-02 14:12:58
【问题描述】:
我看到这是一个常见问题,因为我浏览了很多帖子,但无法为我的帖子找到解决方案。我正在从WinForms 迁移到WPF,并且有一个需要绑定到ListView 的DataSet。我试图遵循这个解决方案:https://stackoverflow.com/a/5880315/2920121 但没有成功。
请注意,我是 C# 和 .NET 的新手。
这是我的 WPF 和 WinForms 代码:
WinForms:
CmdStrFg = "SELECT dbname, Version, UpdateTime FROM(...)as tbl2 ";
CmdStrBlm = "SELECT dbname, Version, UpdateTime FROM (...)as tbl1 ";
CmdStrPay = "SELECT dbname, Version, UpdateTime FROM(...)as tbl3 ";
CmdStrTran = "SELECT dbname, Version, UpdateTime FROM(...)as tbl4";
DataSet ds = new DataSet();
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringBlm), CmdStrBlm));
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringFg), CmdStrFg));
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringPay), CmdStrPay));
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringTrans), CmdStrTran));
DataTable dtAll = ds.Tables[0].Copy();
for (var i = 1; i < ds.Tables.Count; i++) // this did the trick for
{ // for me with WinForms
dtAll.Merge(ds.Tables[i]);
}
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dtAll;
// resize column 3 to fit the window content
WPF.xaml:
<ListView ItemsSource="{Binding DbVersions}" DockPanel.Dock="Top">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Version" DisplayMemberBinding="{Binding Version}" Width="60"/>
<GridViewColumn Header="Last Updated" DisplayMemberBinding="{Binding LastUpdated}" Width="140"/>
</GridView>
</ListView.View>
</ListView>
我试图将ObservableCollection 与类对象一起使用,但没有走远。
任何帮助都感激不尽。
【问题讨论】:
-
那么现在 DbVersions 是什么类型的集合呢?
-
我试图采用这种方法 public ObservableCollection
_observableCollection = new ObservableCollection () ,如我发布的链接中所示。不确定这是否正确。 -
你需要使用 ObservableCollection
。您的类实现 INotifyPropertyChanged 接口并在其属性集分支上触发事件。我将尝试添加一个简单的示例。 -
如果您也需要绑定到 DataTable 示例,请告诉我。
标签: c# wpf listview data-binding observablecollection