2015-07-03 70 views
0

當按鈕單擊(MVVM模型)時,我想刷新我的數據網格。在我看來,沒有關於視圖的參考。任何人都可以解釋。如何使用MVVM刷新我的DataGrid

我想按鈕點擊時使用DataGrid.Refresh()方法。我如何在MVVM模型中使用它。

+0

http://stackoverflow.com/questions/5285377/wpf-mvvm-inotifypropertychanged-implementation-model-or-viewmodel – Dani

+0

首先在mvvm沒有沒有按鈕點擊,第二我想刷新我的DataGrid。 –

回答

0

將您的數據項目設置爲ObservableCollection並將dataGriditemSourceObservableCollection綁定。 Datagrid將被刷新,如果條目將被添加/刪除或移動到這個集合。

+0

我想按下按鈕時使用DataGrid.Refresh()方法。我如何在MVVM模型中使用它。 –

+0

您只需創建按鈕命令並將該方法綁定到該命令。在該方法中,刷新你的收藏。 –

0

您需要將您的DataGrid數據綁定到一些收集視圖模型:

<DataGrid ItemsSource="{Binding Items}">...</DataGrid> 

然後,如果你的Items屬性是ObservableCollection類型,數據網格將自動刷新,當項目被添加或從項目集合中刪除。無需調用DataGrid.Refresh() - 這就是爲什麼MVVM使事情變得更簡單。當東西在視圖模型發生

private void Refresh() 
    { 
     //in this case, items doesn't have to be ObservableCollection, but any collection type 
     Items = new ObservableCollection<SomeClass>    { 
      new SomeClass(), 
      new SomeClass() 
     }; 
     OnPropertyChanged("Items"); 
    } 

如果你真的需要訪問的UIElement,然後做從代碼隱藏,(使用視圖模型事件:

public class MainWindowViewModel : ViewModelBase 
{ 
    public MainWindowViewModel() 
    { 
     Items = new ObservableCollection<SomeClass>(); 
     //add some test data 
     Items.Add(new SomeClass()); 
     Items.Add(new SomeClass()); 

     RefreshCommand = new DelegateCommand(Refresh); 
    } 

    public DelegateCommand RefreshCommand { get private set; } 

    public ObservableCollection<SomeClass> Items { get; private set; } 

    private void Refresh() 
    { 
     Items.Clear(); 

     //add actual items 
     Items.Add(new SomeClass()); 
     Items.Add(new SomeClass()); 
    } 
} 

或者,您可以卡斯特創建項目集合的新實例通知視圖,發生了一些事情)。在下面的示例中,我使用PropertyChanged事件來通知視圖,viewmodel中的某些內容已更改,並且視圖負責刷新viewmodel。

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     DataContext = new MainWindowViewModel(); 
     ((MainWindowViewModel) DataContext).PropertyChanged += ViewModel_PropertyChanged; 
    } 

    void ViewModel_PropertyChanged(object s, PropertyChangedEventArgs e) 
    { 
     if (e.PropertyName == "Items") 
     { 
      MyDataGrid.Refresh(); 
     } 
    } 
0

我正在使用綁定到DataGrid的DataTable。如果我將列添加到DataTable,DataGrid不會更新UI。爲了強制它通過ViewModel完成,我首先將DataTable屬性設置爲null(暫時保存),然後將其設置回原始的DataTable。這對我有效。