我是MVVM和数据绑定的新手,我在将gridview动态绑定到数据表时遇到了一些麻烦。我能够将列标题绑定,但网格本身没有显示任何数据。
我的模型只是返回一个数据表,作为传递给它的SQL字符串的结果。 我的viewmodel只是包装数据表并绑定到视图。
现在我只想通过从主窗口填充gridview来显示数据,但只显示标题。
我知道模型中有数据。但结果数据表。
我的观点模型:
public class ResultsViewModel
{
private DataTable _dt;
public ResultsViewModel()
{
DataSource _ds = new DataSource();
_dt = _ds.Execute("select * from tbl_users");
}
public DataTable Results
{
get { return _dt; }
set { _dt = value; }
}
}
我的代码从主窗口填充gridview:
public MainWindow()
{
InitializeComponent();
ResultsView view = new ResultsView();
ResultsViewModel model = new ResultsViewModel();
GridView Grid = new GridView();
foreach (DataColumn col in model.Results.Columns)
{
Grid.Columns.Add(new GridViewColumn
{
Header = col.ColumnName,
DisplayMemberBinding = new Binding(col.ColumnName)
});
}
view._listView.View = Grid;
view.DataContext = model;
view.SetBinding(ListView.ItemsSourceProperty, new Binding());
_placeholder.Content = view;
}
ResultsView xaml:
<UserControl x:Class="InDevReporting.Views.ResultsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ListView x:Name="_listView" />
</Grid>
答案 0 :(得分:2)
尝试将数据上下文设置为model.Results
。
即改变这一行:
view.DataContext = model;
到此:
view.DataContext = model.Results;
通常,您将在视图模型上创建依赖项属性,并在XAML中指定绑定。网格应该足够聪明,以确定要绘制的列:
<ListView ItemsSource="{Binding Results}" />
public MainWindow()
{
InitializeComponent();
// your code to instance and populate model
this.DataContext = model;
}
public class ResultsViewModel : DependencyObject
{
public static readonly DependencyProperty ResultsProperty = DependencyProperty.Register("Results", typeof(DataTable) , typeof(ResultsViewModel));
public DataTable Results
{
get { (DataTable)GetValue(ResultsProperty); }
set { SetValue(ResultsProperty, value); }
}
}
我已经从内存中取出了这个,所以如果代码不完全正确,请道歉。声明新依赖项属性的最简单方法是使用propdp
代码段。这是记忆的很多语法。