使用MVVM:
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ... />ViewModel:
public class Item: INotifyPropertyChanged { ... }
public ObservableCollection<Item> Items { get; set; }
public Item SelectedItem { get; set; }现在如果我更改了SelectedItem
// change
Items = new ObservableCollection<Item>(...);
SelectedItem = Items.FirstOrDefault(item => ... some condition);
// notify view
OnPropertyChanged();
OnPropertyChanged(nameof(SelectedItem));然后想要的项目被适当地选择,但它没有被聚焦。使用键盘导航如果我以某种方式将焦点放在ListView上,那么第一个项目就会被选中并获得焦点。
如何给SelectedItem焦点?
发布于 2016-10-14 00:33:19
就我个人而言,我更喜欢将我的控件的行为逻辑放在控件的代码中。我的意思是扩展标准控件,以便以我需要的方式改变它们的行为。
首先,我需要扩展ListViewItem控件:
namespace Sample
{
public class ListViewItem : System.Windows.Controls.ListViewItem
{
protected override void OnSelected(RoutedEventArgs e)
{
base.OnSelected(e);
if (IsSelected)
{
Focus();
}
}
}
}然后我需要一个使用我的ListViewItem的ListView控件
namespace Sample
{
public class ListView : System.Windows.Controls.ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new ListViewItem();
}
}
}所以我的XAML将变成:
<local:ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ... />我希望它能帮助你。
发布于 2016-10-13 21:34:36
一种可能是当ListView具有焦点时,自动聚焦选定的ListViewItem。
xaml:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="Selected" Handler="ListViewItem_Selected" />
</Style>
</ListView.ItemContainerStyle>查看cs:
void ListViewItem_Selected(object sender, RoutedEventArgs e)
{
if (listView.IsFocused)
(e.Source as ListViewItem)?.Focus();
}https://stackoverflow.com/questions/40020832
复制相似问题