在自定义INotifyPropertyChanged类中访问ListViewItems

时间:2013-03-18 04:56:28

标签: c# wpf listview inotifypropertychanged

我有一个带有ListViewItemsSource的{​​{1}}来显示给定的商品属性。以下是重要部分的片段:

GridViewColumns

我希望能够专注于用户选择的<ListView Name="listView1" ItemsSource="{Binding Path=listItemCollection}" DataContext="{Binding ListItem}"> <ListView.View> <GridView x:Name="gridViewMain"> <GridViewColumn x:Name="listViewItemNumberColumn" Width="50"> <GridViewColumnHeader>#</GridViewColumnHeader> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock x:Name="idTextBlock" KeyboardNavigation.IsTabStop="False" HorizontalAlignment="Center" Text="{Binding Path=Id}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn x:Name="listViewItemNameColumn" Width="500"> <GridViewColumnHeader>Name</GridViewColumnHeader> <GridViewColumn.CellTemplate> <DataTemplate> <TextBox x:Name="nameTextBox" TextChanged="nameTextBox_TextChanged" Text="{Binding Path=ItemName, UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> ... 内的特定字段/文本框。我可以使用以下代码从给定索引中找到ListViewItem

ListViewItem
到目前为止一切顺利。直到我想实际访问listView1.ItemContainerGenerator.ContainerFromIndex(i); 中的内容。而不是ListViewItem返回我期望的一组控件,而是返回我的自定义类ListViewItem.Content。这是该类的样子片段:

ListItem

我完全迷失于如何专注于public class ListItem : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public TextBlock idTextBlock; public GridView gridViewMain; public bool Selected { get; set; } public string ItemName { get; set; }

中的nameTextBox文本框控件

是否有可能以某种方式将ListViewItem.nameTextBox等控件链接到我的自定义idTextBlock类?

1 个答案:

答案 0 :(得分:0)

ListView SelectedItem中有一个属性。你需要绑定它。

在你看来

<ListView Name="listView1" ItemsSource="{Binding Path=listItemCollection}" SelectedItem="{Binding SelectedListItem}" DataContext="{Binding ListItem}">

在你的listItemCollection类中,添加一个SelectedListItem变量。

public ListViewItem SelectedListViewItem {get; set;}

修改

删除ListView。使用DataGridOnly。

XAML:

<DataGrid ItemsSource="{Binding MyItems}" SelectedItem="{Binding SelectedItem}">
     <DataGrid.Columns>
         <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="175" />
         <DataGridTextColumn Binding="{Binding Path}" Header="Path" Width="75" />
     </DataGrid.Columns>
</DataGrid>

视图模型:

ObservableCollection<MyItem> MyItems {get; set;}
MyItem SelectedItem {get; set;}

public class MyItem : INotifyPropertyChanged
{
    public string Name {get; set;}
    public string Path {get; set;}
}