2010-01-14 25 views
1

我希望有人能幫助我解決所選的項目,在用戶控件集合控制(使用MVVM實現)...如何在WPF

約什 - 史密斯做了大文章的「WPF與示範應用程式 - 查看查看模型「,並在他的文章中包含以下code sample

如果您下載代碼示例並運行應用程序並查看所有客戶,然後選擇一家公司(例如第四家公司),然後單擊「創建新客戶」(將打開新客戶的選項卡),然後點擊「所有客戶」選項卡,然後使用鍵盤嘗試將選定項目向上移動到當前選定項目的項目上,但不是!相反,選擇器再次從頂部開始。

我不知道爲什麼會發生這種情況,但是我希望它能夠讓您點擊時,它會向上移動一個項目,而不是從列表頂部開始。我懷疑這與FocusManager有關,但我不確定。

有誰知道爲什麼控制行爲以這種方式?是否有可能,以及我應該採取什麼方法來修改此代碼並使其不「重置」所選項目?

我已經實現了一個基於此模板的項目,並且出於功能方面的原因,我需要讓鍵盤將選擇器向上移動&而無需重置。

回答

1

在您提供的示例中,設置IsSelected屬性不影響邏輯焦點,因此默認設置焦點。我現在想到的解決方法是強制關注代碼隱藏中的元素。作爲一個例子添加處理程序到listview的選擇像這樣:

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
    if (e.AddedItems.Count == 0 || e.RemovedItems.Count > 0) return; 
    var item = (CustomerViewModel) e.AddedItems[0]; 
    var container = (UIElement) listView1.ItemContainerGenerator.ContainerFromItem(item); 
    container.Focus(); 
    } 
+0

THKS DH,我會試試這個。 – 2010-02-07 05:21:52