2011-06-30 97 views
3

我是MVVM和數據綁定的新手,我在動態綁定gridview到數據表時遇到了一些麻煩。我能夠獲得列標題綁定,但沒有數據顯示在網格中。MVVM gridview綁定到數據表WPF

我的模型簡單地返回一個數據表作爲傳遞給它的SQL字符串的結果。 我的viewmodel只是包裝數據表,並綁定到視圖。

現在我只是試圖通過從主窗口填充gridview顯示數據,但只有標題顯示。

我知道模型中有數據。結果雖然datatable。

我的視圖模型:

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> 

回答

2

嘗試設置你的數據上下文改爲model.Results

即改變這一行:

這樣:

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代碼片段。記憶的語法很多。

+0

啊,這很有道理......感謝您的幫助! – ChandlerPelhams

+0

@ChandlerPelhams,很高興幫助。 :) –