首页 > 解决方案 > C#如何使用ListView selecteditem

问题描述

我对 C# 和 WPF 很陌生。我已经开始了新项目来学习如何一起使用它们以及如何构建 UI。Bearly 开始我一直坚持使用 listview 集合中的 selecteditem。我试图显示从所选对象中获取的一些基本信息。在表单上我添加了标签和一些按钮。主要目标是打开第二个表格,其中包含有关所选记录的详细信息。但首先我想实现一些简单的东西 - 只是在标签控件中显示记录 ID。我可以获取记录并用记录填充列表框,但是所有尝试读取选定数据的尝试都失败了(标签中没有显示任何内容)。你能帮我看看如何在标签场景中使用 selecteditem 吗?希望也能给我一些关于细节窗口场景的建议......无论如何 - 所有关于我的代码的评论将不胜感激,

为方便起见,BitBucket 提供了所有代码:https ://bitbucket.org/is-smok/gama

感谢您的任何帮助。

MainWindow.xaml 文件的一部分

    <Grid>
    <ListView x:Name="lstInventory" Height="180" Margin="5,51,79,0" VerticalAlignment="Top" 
              ItemsSource="{Binding GetInventory}"  
              SelectedItem="{Binding SelectedInventory, Mode=TwoWay}" 
              DisplayMemberPath="Inventory_id">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="GamaID" DisplayMemberBinding="{Binding Inventory_id}" />
                <GridViewColumn Header="Typ"  DisplayMemberBinding="{Binding Serial_number}" />
                <GridViewColumn Header="Producent"  DisplayMemberBinding="{Binding Registry_number}" />
            </GridView>
        </ListView.View>
    </ListView>
    <Button Content="Add" HorizontalAlignment="Left" Margin="57,265,0,0" VerticalAlignment="Top" Width="75"   Click="AddInventory_Click"/>
    <Button Content="Remove" HorizontalAlignment="Left" Margin="137,265,0,0" VerticalAlignment="Top" Width="75"   Click="RemoveInventory_Click"/>
    <Button Content="Edit" HorizontalAlignment="Left" Margin="217,265,0,0" VerticalAlignment="Top" Width="75"  Click="EditInventory_Click"/>
    <Label Content="{Binding SelectedInventory.Serial_number}" HorizontalAlignment="Left" Margin="120,326,0,0" VerticalAlignment="Top" Height="24" Width="140"/>
    <Label x:Name="lblInventoryId" Content="{Binding SelectedInventory.Inventory_id}" HorizontalAlignment="Left" Margin="10,326,0,0" VerticalAlignment="Top" Height="24" Width="105"/>
</Grid>

MainWindow.xaml.cs 的一部分

    public MainWindow()
    {
        InitializeComponent();

        DataAccess dataAccess = new DataAccess();
        inventory = dataAccess.GetIventory();
        lstInventory.ItemsSource = inventory;
        lstInventory.DisplayMemberPath = "inventory_id";
    }

DataAccess.cs 文件的一部分

    private Inventory m_SelectedInventory;
    public Inventory SelectedInventory
    {
        get
        {
            return m_SelectedInventory;
        }
        set
        {
            m_SelectedInventory = value;
        }
    }

标签: c#wpflistviewselecteditem

解决方案


你能帮我看看如何在标签场景中使用 selecteditem 吗?

您可以直接绑定到的SelectedItem属性ListView

<Label x:Name="lblInventoryId" Content="{Binding SelectedItem.Inventory_id, ElementName=lstInventory}" ... />

但是为了能够绑定到您的SelectedInventory属性,您应该做的是DataContext将窗口的设置为DataAccess对象:

public MainWindow()
{
    InitializeComponent();

    DataContext = new DataAccess();
}

GetInventory然后,如果您在 XAML 中绑定的绑定是该类的公共属性,则绑定应该可以工作:DataAccess

ItemsSource="{Binding GetInventory}"  

您不能绑定到方法。因此,您应该GetIventory()在类中调用该方法DataAccess并通过属性公开结果,例如:

public DataAccess
{
    public DataAccess()
    {
        Inventories = GetIventory();
    }

    public IEnumerable Inventories { get; private set; }

   //...
}

XAML:

ItemsSource="{Binding Inventories}"

另请注意,每次设置属性时DataAccess都应实现INotifyPropertyChanged接口并向 UI 发出通知。SelectedInventory有关这方面的更多信息,请参阅MSDN


推荐阅读