попробуйте использовать прикрепленные свойства
public static class ItemSelector
{
public static DependencyProperty MakeSelectionProperty =
DependencyProperty.RegisterAttached("MakeSelection",
typeof(bool?),
typeof(ItemSelector),
new PropertyMetadata(null, OnMakeSelectionPropertyChanged));
public static DependencyProperty ItemsControlProperty =
DependencyProperty.RegisterAttached("ItemsControl",
typeof(ItemsControl),
typeof(ItemSelector));
public static void SetMakeSelection(
DependencyObject d, bool value)
{
d.SetValue(MakeSelectionProperty, value);
}
public static void SetItemsControl(
DependencyObject d, ItemsControl value)
{
d.SetValue(ItemsControlProperty, value);
}
private static void OnMakeSelectionPropertyChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var itemsControl = d.GetValue(ItemsControlProperty)
as ItemsControl;
if (itemsControl == null)
return;
((ListBoxItem) itemsControl.ContainerFromElement(d))
.IsSelected = true;
}
и вот его использование
<ListView ItemsSource="{Binding}" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding SomeText}"
w:ItemSelector.MakeSelection="{Binding RelativeSource=
{RelativeSource Self}, Path=IsFocused}"
w:ItemSelector.ItemsControl="{Binding RelativeSource=
{RelativeSource FindAncestor, AncestorType=
{x:Type ListView}}}" Margin="10" />
</DataTemplate>
</ListView.ItemTemplate>