Решение простое:
- Создайте новое свойство Bindable в вашем DataContext того типа, который ваш
ItemSource
содержит - Добавьте
SelectedItem="{Binding YourNewPropertyName}"
в свой ListView - Рад, что решил эту проблему за короткий промежуток времени
Если вам нужен индекс, а не фактический элемент, решение во многом совпадает, но со свойством int
и SelectedIndex
вместо
Обратите внимание, что вам нужно правильно реализовать INotifyPropertyChanged
, чтобы это работало.Пример:
public class MyDataContext : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<MyItem> ListResult { get; }
public MyItem MySelectedItem
{
get => this._MySelectedItem;
set
{
this._MySelectedItem = value;
this.PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(this.MySelectedItem)));
}
}
private MyItem _MySelectedItem;
public int MySelectedIndex
{
get => this._MySelectedIndex;
set
{
this._MySelectedIndex = value;
this.PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(this.MySelectedIndex)));
}
}
private int _MySelectedIndex;
}
Затем ваш XAML изменится на:
<ListView x:Name="ListViewMaster" Height="100" Width="130"
HorizontalAlignment="Left" VerticalAlignment="Top"
ItemsSource="{Binding ListResult}"
IsSynchronizedWithCurrentItem="True"
SelectedItem="{Binding MySelectedItem}"
SelectedIndex="{Binding MySelectedIndex}">
<ListView.View>
<GridView AllowsColumnReorder="False" >
<GridViewColumn Header="Head" Width="130">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding myID}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>