2013-11-03 146 views
0

我有一個ListView綁定和呈現我的ObservableCollection罰款,除了在ListView中選擇正確的項目,如果我選擇一個DataTemplate選擇UserControls中的文本框。我的DataTemplate根據ObservableCollection中的類型選擇一個視圖,當前只有類型爲TimeDelay:ModelBase或AddPoint:ModelBase。使用DataTemplate在ListView中選擇項目

如果我選擇任何區域,但ListViewDelayView或ListAddPointView的ListView中的TextBox除外,則選擇是正確的。但是,選擇TextBox時,ListView選擇不會移動,請參閱圖像。藍色選擇應該向下移動到ddddd。

<UserControl.Resources> 
    <DataTemplate DataType="{x:Type model:TimeDelay}"> 
     <local:ListTimeDelayView /> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type model:AddPoint}"> 
     <local:ListAddPointView /> 
    </DataTemplate> 
</UserControl.Resources> 

的ListView

<ListView ItemsSource="{Binding UserControlOneStatic.MotionSequenceCollection, Mode=TwoWay}" 
    SelectedIndex="{Binding MotionSequenceStatic.MotionListViewSelected, Mode=TwoWay}"/> 

圖片下面

enter image description here

+1

@Chris - 你是對的。它被回答了,我用了下面的代碼: - FloppyDisk

+0

好東西,好像可能已經= d – Chris

+0

我發現我的綁定更新不及時:-(至少自動直到我按同樣的事情這是它沒有做的事情,所以,當我得到第二個並且會更新的時候,我會更加仔細地看待它,我帶着簡單的解決方案(短的代碼)對比另一個更長的代碼和解釋鏈接。 – FloppyDisk

回答

1

在WPF輸入事件冒泡元素樹。您可以在您的ListView上處理GotKeyboardFocus並獲取原始元素,它的編號爲DataContext

void myListView_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
    { 
     var element = e.NewFocus as FrameworkElement; 
     myListView.SelectedItem = element.DataContext; 
    } 

這就是基本思想。它應該是ItemsControls,IMO的默認行爲。

編輯:克里斯鏈接到更簡單和正確的解決方案使用XAML樣式和觸發器。

+0

感謝您的反饋意見。我覺得這個問題不好已經在這裏回答了。 [選擇列表框中的文本框項目不會更改列表框中選定的項目](http://stackoverflow.com/questions/653524/selecting-a-textbox-item-in-a-listbox-does-not-change -the選擇的項目的最-1)。正如你所說,基本的想法是一樣的。 – FloppyDisk