2015-04-17 94 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

相关问题