1. 程式人生 > >WPF TreeView SelectedItemChanged事件多次觸發問題

WPF TreeView SelectedItemChanged事件多次觸發問題

最近使用一個封裝了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);
            }
        }