WPF Datagrid OnPropertyChanged 导致 SelectionChanged 事件
WPF Datagrid OnPropertyChanged causes SelectionChanged event
我有一个绑定到模型的 WPF 数据网格。
在模型中我有一个 属性 定义为
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());
}
在测试过程中,我注意到每次更改代码中的 属性 "status" 时,网格都会自动更新(这正是我想要的),但也会触发 SelectionChanged 事件。
有什么方法可以在我从代码更改模型时阻止事件触发,但在用户单击网格中的项目时让它通过?
也许我可以使用不同的事件来手动选择网格中的项目?
非常感谢。
Is there any way I can stop the event from firing when I change the model from code but let it go through when user clicks an item in the grid?
否,但有一个简单的解决方法。添加一个 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());
}
我有一个绑定到模型的 WPF 数据网格。
在模型中我有一个 属性 定义为
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());
}
在测试过程中,我注意到每次更改代码中的 属性 "status" 时,网格都会自动更新(这正是我想要的),但也会触发 SelectionChanged 事件。
有什么方法可以在我从代码更改模型时阻止事件触发,但在用户单击网格中的项目时让它通过?
也许我可以使用不同的事件来手动选择网格中的项目?
非常感谢。
Is there any way I can stop the event from firing when I change the model from code but let it go through when user clicks an item in the grid?
否,但有一个简单的解决方法。添加一个 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());
}