2015-04-17 108 views
0

我有一個綁定到模型的WPF Datagrid。WPF Datagrid OnPropertyChanged導致SelectionChanged事件

模型裏面我有一個屬性定義爲

public String status 
    { 
     get 
     { 
      return m_status; 
     } 
     set 
     { 
      m_status = value; 
      OnPropertyChanged("status");   
     } 
    } 

此屬性通知通過OnPropertyChanged變化的網格。

我也處理SelectionChanged事件觸發不同的活動。

SelectionChanged="gridSongs_SelectionChanged" 


    private void gridSongs_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Console.WriteLine("gridSongs_SelectionChanged " + sender.ToString()); 
    } 

在測試過程中這一點,我已經注意到,每次我在代碼更改屬性「狀態」時間網格自動更新(這是我想要的),而且還激發了SelectionChanged事件也是如此。

當我從代碼更改模型時,是否有任何方法可以阻止事件發生,但是當用戶單擊網格中的某個項目時讓它通過?

也許我可以使用不同的事件手動選擇網格中的項目?

非常感謝。

回答

1

有沒有什麼辦法可以阻止事件發生時,我從代碼更改模型,但讓它通過時,用戶點擊網格中的項目?

不,但有一個簡單的解決方法。添加private bool isLocal變量,並將其設置爲true您做出任何更改之前,回到false算賬:

isLocal = true; 
status = "Some Value"; 
isLocal = false; 

然後,在你SelectionChanged處理程序,檢查這個變量,才反應過來,如果它是false

private void gridSongs_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (!isLocal) Console.WriteLine("gridSongs_SelectionChanged " + sender.ToString()); 
} 
+0

謝謝謝里登。那可行。我實際上實現了另一個事件「mouseup」,並移動了我在SelectionChanged事件中的邏輯。這似乎也適用。我只需要一些額外的邏輯來檢查一行是否被選中,但我也喜歡你的版本。會試一試。 – Mozzak

相關問題