簡體   English   中英

上下文菜單打開時,列表框所選項目未更新

[英]ListBox selected items not updated when the context menu opens

我的WPF應用程序有一個列表框,其中包含很多項。 當用戶用鼠標右鍵單擊一個項目以打開上下文菜單時,我需要評估當前選擇的項目以構建菜單項標題,該標題告訴用戶此命令會發生什么。

此命令將在項目上設置過濾器,並應預先指示結果過濾器,該過濾器基於所選項目中的數據。

由於我不知道通過MVVM將ListBox的選定項放入視圖模型的任何方法,因此我在后面添加了代碼。 SelectionChanged事件處理程序將選定的項目發送到視圖模型。

不幸的是,當用戶單擊速度足夠快時,此選定項目列表已過時。 我經常看到以前的選擇,而不是當前的選擇。 僅當我按住鼠標右鍵足夠長的時間時,選擇才是最新的。

這是我的測試應用程序的屏幕截圖(如下):

在此處輸入圖片說明

問:如何才能可靠地獲取上下文菜單標題的當前選擇?

我做了一個非常簡單的測試用例,因此您可以重現該問題。 轉換器的延遲很短,可以模擬活動。 我的實際轉換器沒有此延遲,但是由於視圖更加復雜,因此加載UI花費的時間也很短,效果相同。

這是代碼: https : //drive.google.com/file/d/0B8CN0ghdY1SdTW9Ka1lHc1dIUFk/edit

將您的ViewModel更新為此

internal class MainViewModel : INotifyPropertyChanged
{
    private List<string> _selectedItems;

    public MainViewModel()
    {
        MenuCommand = new MenuCommand();

        StringItems = new List<string>();
        StringItems.Add("Hello");
        StringItems.Add("world");
        StringItems.Add("of");
        StringItems.Add("mysterious");
        StringItems.Add("WPF");
    }

    public List<string> StringItems { get; set; }

    public MenuCommand MenuCommand { get; private set; }

    public string MenuCommandTitle
    {
        get { return "Selected items: " + SelectedItems.Aggregate((a, b) => a + ", " + b); }
    }

    public List<string> SelectedItems
    {
        get { return _selectedItems; }
        set
        {
            _selectedItems = value;
            OnPropertyChanged("MenuCommandTitle");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

您想要更新ContextMenu的綁定,以將新值通知UI。

OnPropertyChanged("MenuCommandTitle");

看來您的MainViewModel沒有實現INotifyPropertyChanged,所以您的MenuCommandTitle屬性並不總是更新。 當您在后台代碼中更新SelectedItems時,您將需要觸發屬性更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM