0

特定の項目プロパティを表示するためListViewのバインドItemsSourceとがあります。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>
            ...

ユーザーが選択した 内の特定のフィールド/テキストボックスに集中できるようにしたいListViewItemListViewItemこのコードを使用して、特定のインデックスからを見つけることができます。

listView1.ItemContainerGenerator.ContainerFromIndex(i);

これまでのところ、すべて順調です。内のコンテンツに実際にアクセスしたいまでですListViewItemListViewItem.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カスタムListItemクラスに何らかの方法でリンクすることは可能ですか?

4

1 に答える 1

0

ListView SelectedItem にプロパティがあります。これをバインドする必要があります。

あなたの見解では

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

そして、listItemCollection があるクラスで、SelectedListItem 変数を追加します。

public ListViewItem SelectedListViewItem {get; set;}

編集:

リストビューを削除します。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;}
}
于 2013-03-18T05:24:07.590 に答える