默认选择ListView中的第一项,MVVM, c#

本文关键字:一项 MVVM ListView 选择 默认 | 更新日期: 2023-09-27 18:07:40

我正在编写一些程序,其中可以选择设备并稍后配置它。我实现了ListView,其中列出了所有设备。我喜欢第一个设备是默认选中的。怎么做呢?我尝试了在StackOverflow和Google上找到的几个解决方案,但没有运气。

下面是我的XAML代码:

<ListView Name="lvdevices" Grid.Row="1" Margin="2" ItemsSource="{Binding devicelist}" SelectionMode="Single" SelectedItem="{Binding SelectedDevice}" DataContext="{Binding }">
       <ListView.View>
                <GridView x:Name="gridDevices">
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Tag="{Binding ID}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn x:Name="DeviceId" Header="DeviceId" DisplayMemberBinding="{Binding DeviceId}" Width="50"/>
                    <GridViewColumn x:Name="NameId" Header="NameId" DisplayMemberBinding="{Binding NameId}" Width="100"/>
                    <GridViewColumn x:Name="ManufacturerId" Header="ManufacturerId" DisplayMemberBinding="{Binding ManufacturerId}" Width="150"/>
               </GridView>
      </ListView.View>
</ListView>

我不知道如何实现,第一个项目是在连接时默认选择。也有可能找不到设备,那怎么办?请帮忙!如有疑问请提问

默认选择ListView中的第一项,MVVM, c#

当您填充devicelist时,您可以将SelectedDevice设置为设备列表中的第一项,如果列表中没有任何内容,则可以将null设置为设备列表中的第一项。

using System.Linq;
...
SelectedDevice = devicelist.FirstOrDefault();

假设SelectedDevice实现了INotifyPropertyChanged,这应该在您的视图中选择第一个项目。

在ViewModel中,您只需要将SelectedDevice设置为第一项(当然还会触发OnPropertyChanged)