WPF TreeView SelectedItemChanged事件多次觸發問題
阿新 • • 發佈:2019-02-08
最近使用一個封裝了TreeView的自定義控制元件,使用時綁定了TreeView的SelectedItemChanged事件,發現點選某一節點,會多次觸發SelectedItemChanged事件,第二層節點觸發兩次,第三層節點觸發三次。
簡單排除後發現是TreeView自身控制元件的問題。
原本多次觸發的程式碼如下
//委託
public delegate void SelectedItemChangedEvent(object selectedItem);
//事件
public event SelectedItemChangedEvent SelectedItemChanged;
//TreeView原生事件
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
try
{
object selectedObj = this.treeView.SelectedItem;
if (SelectedItemChanged != null)
{
//此處觸發自定義繫結事件
SelectedItemChanged.Invoke(selectedObj);
}
}
catch (Exception ex)
{
LogService.WriteExceptionLog(ex, "");
ControlUtility.ShowInfomationMsgbox(ex.Message);
}
}
經查閱資料,使用以下方法可以避免多次觸發事件。
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
try
{
object selectedObj = this.treeView.SelectedItem;
if (SelectedItemChanged != null)
{
//SelectedItemChanged.Invoke(selectedObj);
Dispatcher.BeginInvoke(DispatcherPriority.Background, SelectedItemChanged, selectedObj);
}
}
catch (Exception ex)
{
LogService.WriteExceptionLog(ex, "");
ControlUtility.ShowInfomationMsgbox(ex.Message);
}
}