C# ListView selecteditem的使用方法
C# how to use ListView selecteditem
我对 C# 和 WPF 还很陌生。我已经开始了一个新项目来学习如何一起使用它们以及如何构建 UI。 Bearly 开始我一直坚持使用 listview 集合中的 selecteditem。我试图显示从所选对象中获取的一些基本信息。在表格上我添加了标签和一些按钮。主要目标是打开第二个表格,其中包含有关所选记录的详细信息。但首先我想实现一些简单的东西——只是在标签控件中显示记录 ID。我可以获取记录并用记录填充列表框,但所有读取选定数据的尝试均失败(标签中未显示任何内容)。你能帮我看看如何在标签场景中使用 selecteditem 吗?希望也能给我一些关于 window 场景细节的建议...
无论如何 - 所有关于我的代码的评论都将不胜感激,请耐心等待并记住这是我对这个主题的第一个方法。
为方便起见,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;
}
}
ListView 的 ItemsSource 必须绑定到 IEnumerable 或派生类型的 属性,wpf 不支持绑定到方法。
您好,许多问题之一是 Label 仅在初始化时获取值。 SelectedInventory
已正确更新,但 Label 无法识别它。要实现这一点,请阅读 INotifyPropertyChanged
接口,了解更多信息 here
接口的实现:
public event PropertyChangedEventHandler PropertyChanged;
public Inventory SelectedInventory
{
get
{
return m_SelectedInventory;
}
set
{
m_SelectedInventory = value;
RaisePropertyChanged(nameof(SelectedInventory));
}
}
private void RaisePropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Could you please help me and show me how to use selecteditem with label scenario?
您可以直接绑定到 ListView
的 SelectedItem
属性:
<Label x:Name="lblInventoryId" Content="{Binding SelectedItem.Inventory_id, ElementName=lstInventory}" ... />
但是要绑定到 SelectedInventory
属性,您应该做的是将 window 的 DataContext
设置为 DataAccess
对象:
public MainWindow()
{
InitializeComponent();
DataContext = new DataAccess();
}
那么绑定应该可以工作,前提是您在 XAML 中绑定的 GetInventory
是 public 属性 的 DataAccess
class:
ItemsSource="{Binding GetInventory}"
您不能绑定到方法。因此,您应该在 DataAccess
class 中调用 GetIventory()
方法,并通过 属性 公开结果,例如:
public DataAccess
{
public DataAccess()
{
Inventories = GetIventory();
}
public IEnumerable Inventories { get; private set; }
//...
}
XAML:
ItemsSource="{Binding Inventories}"
另请注意,DataAccess
应实现 INotifyPropertyChanged
接口,并在每次设置 SelectedInventory
属性 时向 UI 发出通知。请参阅 MSDN 了解更多相关信息。
我对 C# 和 WPF 还很陌生。我已经开始了一个新项目来学习如何一起使用它们以及如何构建 UI。 Bearly 开始我一直坚持使用 listview 集合中的 selecteditem。我试图显示从所选对象中获取的一些基本信息。在表格上我添加了标签和一些按钮。主要目标是打开第二个表格,其中包含有关所选记录的详细信息。但首先我想实现一些简单的东西——只是在标签控件中显示记录 ID。我可以获取记录并用记录填充列表框,但所有读取选定数据的尝试均失败(标签中未显示任何内容)。你能帮我看看如何在标签场景中使用 selecteditem 吗?希望也能给我一些关于 window 场景细节的建议... 无论如何 - 所有关于我的代码的评论都将不胜感激,请耐心等待并记住这是我对这个主题的第一个方法。
为方便起见,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;
}
}
ListView 的 ItemsSource 必须绑定到 IEnumerable 或派生类型的 属性,wpf 不支持绑定到方法。
您好,许多问题之一是 Label 仅在初始化时获取值。 SelectedInventory
已正确更新,但 Label 无法识别它。要实现这一点,请阅读 INotifyPropertyChanged
接口,了解更多信息 here
接口的实现:
public event PropertyChangedEventHandler PropertyChanged;
public Inventory SelectedInventory
{
get
{
return m_SelectedInventory;
}
set
{
m_SelectedInventory = value;
RaisePropertyChanged(nameof(SelectedInventory));
}
}
private void RaisePropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Could you please help me and show me how to use selecteditem with label scenario?
您可以直接绑定到 ListView
的 SelectedItem
属性:
<Label x:Name="lblInventoryId" Content="{Binding SelectedItem.Inventory_id, ElementName=lstInventory}" ... />
但是要绑定到 SelectedInventory
属性,您应该做的是将 window 的 DataContext
设置为 DataAccess
对象:
public MainWindow()
{
InitializeComponent();
DataContext = new DataAccess();
}
那么绑定应该可以工作,前提是您在 XAML 中绑定的 GetInventory
是 public 属性 的 DataAccess
class:
ItemsSource="{Binding GetInventory}"
您不能绑定到方法。因此,您应该在 DataAccess
class 中调用 GetIventory()
方法,并通过 属性 公开结果,例如:
public DataAccess
{
public DataAccess()
{
Inventories = GetIventory();
}
public IEnumerable Inventories { get; private set; }
//...
}
XAML:
ItemsSource="{Binding Inventories}"
另请注意,DataAccess
应实现 INotifyPropertyChanged
接口,并在每次设置 SelectedInventory
属性 时向 UI 发出通知。请参阅 MSDN 了解更多相关信息。