以下xaml代碼會生成一個包含三列的ListView。 ListView ItemsSource是一個可觀察的集合。第一列顯示特定行中對象的名稱。第二列和第三列顯示與特定行中的對象關聯的按鈕。選擇新行後ListView行保持選中狀態
<Grid Width="497" Height="260">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="309*" />
<ColumnDefinition Width="188*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="478*" />
<RowDefinition Height="4*" />
</Grid.RowDefinitions>
<GroupBox Header="ObservableCollection Object List" HorizontalAlignment="Left" Width="497" BorderBrush="Black" BorderThickness="2" Grid.ColumnSpan="2">
<ListView ItemsSource="{Binding Path=CollectionList}" Name="QueueListView">
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
</Style>
</ListView.Resources>
<ListView.SelectedItem>
<Binding Path="SelectedObjectFromList" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" >
</Binding>
</ListView.SelectedItem>
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="Object Name" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Width="160" Header="Property Information">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="Get Property Info" Command="{Binding Path=GetObjProperties}"
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="180" Header="Transfer">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="Transfer Object" Command="{Binding Path=TransferObjHere}"
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</GroupBox>
</Grid>
的SelectCurrentItem事件處理程序綁定ListView.SelectedItem到SelectedObjectFromList財產在我的視圖模型,當用戶點擊「傳輸對象」或「獲取屬性信息」按鈕。我用這個屬性來將選定的對象暴露給我的視圖模型。
這裏是我的SelectCurrentItem處理程序的C#代碼在後面的代碼:
protected void SelectCurrentItem(Object sender, KeyboardFocusChangedEventArgs e)
{
ListViewItem viewItem = (ListViewItem)sender;
viewItem.IsSelected = true;
}
這個偉大的工程!當用戶點擊一個按鈕時,SelectedObjectFromList屬性將從該行的ListView observablecollection對象中更新。 (在點擊按鈕之前,不需要手動單擊ListView行來設置屬性。)
一個問題:當我單擊列表中的按鈕時,最近選擇的行仍然顯示爲被選中(它們在GUI中突出顯示)。
我試圖通過設置ListView控件的屬性isFocused解決問題:
protected void SelectCurrentItem(Object sender, KeyboardFocusChangedEventArgs e)
{
ListViewItem Item = (ListViewItem)sender;
Item.IsSelected = true;
Item.IsFocused = true;
}
當然,這給了我一個StackOverflow的exeption :)。有沒有人有在這種情況下更新GUI中的ListView.Selection的示例代碼?提前致謝。
標籤不屬於標題。 –