C#WPF如何在由数据模板中的对象列表组成的列表框中设置项目[重复]

Posted

技术标签:

【中文标题】C#WPF如何在由数据模板中的对象列表组成的列表框中设置项目[重复]【英文标题】:C# WPF how to set an item in a listbox made of a list of object in a datatemplate [duplicate] 【发布时间】:2021-08-26 06:42:30 【问题描述】:

C# - WPF 我有一个列表框(“lstCustomer”),其中填充了“Id_Name”对象列表

从代码点我获得一个 ID - 例如“2” 如何以编程方式选择 ID 为 2 的 listBox 元素?

lstCustomer.SelectedIndex = ????

代码 - 填充列表

List<Id_Name> list = new ();
list.Add(new Id_Name  Id = "1" , Name = "John" );
list.Add(new Id_Name  Id = "2", Name = "Jim" );
list.Add(new Id_Name  Id = "3", Name = "Frank" );
lstCustomer.ItemsSource = list;

XAML - 列表框和数据模板

<ListBox x:Name="lstCustomer"  ItemTemplate="StaticResource ResourceKey=Id_Name_Template" />


<DataTemplate  x:Key="Id_Name_Template">
                <StackPanel>
                    <Grid >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0">
                            <Run FontWeight="Bold" Text="Binding Id"/>
                        </TextBlock>
                        <TextBlock Grid.Column="1" FontStyle="Italic" Text="Binding Name" />
                    </Grid>
                </StackPanel>
            </DataTemplate>

【问题讨论】:

在 ListBox 上设置 SelectedValuePath="Id",并在 lstCustomer.SelectedValue = "2"; 上选择 Jim。 &lt;ListBox x:Name="custList" ItemTemplate="StaticResource ResourceKey=TemplatePath" SelectedValuePath="Id" SelectedValue="Binding Id"/&gt; 在您的视图模型中 public string Id get; set; 【参考方案1】:

如果您不喜欢使用索引,我建议您绑定 ListBox 的 SelectedItem 属性:

<ListBox x:Name="lstCustomer"
         ItemTemplate="StaticResource ResourceKey=Id_Name_Template"
         SelectedItem="Binding SelectedId_Name"/>

然后您可以在 ViewModel 中设置该属性:

public Id_Name SelectedId_Name  get; set;    //Needs to call your implementation of INotifyPropertyChanged   

[...]  
SelectedId_Name = list.Where( x => x.Id == "2").FirstOrDefault();

或者利用 ListBox 的内置 SelectedValue 功能:

<ListBox x:Name="lstCustomer"
         ItemTemplate="StaticResource ResourceKey=Id_Name_Template"
         SelectedValuePath="Id"
         SelectedValue="Binding SelectedId"/>

public string SelectedId  get; set;  // plus notification

[...]
SelectedId = "2";

【讨论】:

以上是关于C#WPF如何在由数据模板中的对象列表组成的列表框中设置项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使 WPF 数据模板填充列表框的整个宽度?

如何在由前一个元素的连续值和第二项中的零组成的列表中添加连续元素?

如何将 DataGrid 中的文本框绑定到 Wpf 中的列表?

WPF - 在列表框中上下拖放数据模板

使用 SQL (SDF) 数据库中的项目填充 WPF 列表框

如何分解由列表列表组成的数据框