2015-10-19 86 views
0

我一直試圖從本質上用DataTable替換由DataGrid控件自動生成的整個表。在運行時重新加載/替換到WPF DataGrid新表

我之前看過this question,但我一直試圖避免在我的viewmodel類中引用UI元素(或將代碼添加到Mainwindow.xaml.cs作爲最後的手段)。

首先我約束的ItemsSource爲DataGrid到DataView財產我有我的視圖模型:

<DataGrid Grid.Row="1" Grid.Column ="1" ItemsSource="{Binding DisplayView}"/> 

private DataView displayView; 

public DataView DisplayView 
{ 
    get { return displayView; } 
    set { displayView = value; } 
} 

我也有格式化的SQL表到適當的數據表的方法,然後我分配到DataView綁定到網格。

DisplayView = dtCloned.DefaultView; 

當我在構造函數中調用此方法時,表填充執行。

在運行時調用它會以相同的格式創建一個新表,但將其分配給DataView屬性不會重新加載DataGrid以顯示新表;我哪裏錯了?

+0

您的視圖模型需要實現'INotifyPropertyChanged'並通知DisplayView屬性的更改。 –

回答

1

對於綁定以瞭解後面屬性的任何更新,必須在viewmodel/model上實現INotifyPropertyChanged接口。

一旦你這樣做,你的代碼應該是這樣的:在接口上

public class YourViewModel : INotifyPropertyChanged 
{ 
    ... 

    public event PropertyChangedEventHandler PropertyChanged; 

    private DataView displayView; 
    public DataView DisplayView 
    { 
     get { return displayView; } 
     set 
     {  
      displayView = value; 

      if (PropertyChanged != null) 
      {     
       PropertyChanged(this, new PropertyChangedEventArgs(nameof(DisplayView))); 
      } 
     } 
    } 

    ... 
} 

更多信息發現here

+0

謝謝,這正是我所需要的。 :) – Jamz