0

C# WPF 3列のリストビューがあります。行をダブルクリックすると、選択した行の列の値がキャプチャされ、変数として保存されるため、別のページに渡すか、必要に応じて単純に操作できます。ここにあるのは私の練習コードです。今のところ、変数を正しく取得できるかどうかを確認するために、メッセージ ボックスにデータを入力しています。何が起こっているかというと、行から何も取得していません。ifブロックを削除してこれを理解し、それstring name = selectedObject.ilName;がnullであることがわかりました。私が持っている追加の質問は、[0]というステートメントに関してingListLV.SelectedItems[0] as InventoryListです。それは正確には何を指していますか? 最初は、返された値を参照していると思っていたので、[0] は列 1 の値、[1] は列 2 などになりますが、それが間違っていることはわかっています。

これが私のXAML

<ListView x:Name="ingListLV" HorizontalAlignment="Center" Height="100" Margin="0,145,0,0" VerticalAlignment="Top" Width="Auto"
              IsSynchronizedWithCurrentItem="True" 
              ItemsSource="{Binding}" 
              SelectedValuePath="InventoryName"
              Style="{DynamicResource listViewStyle}" 
              MouseDoubleClick="Open_Edit">
        <ListView.View>
            <GridView>
                <GridViewColumn x:Name="InvName" Width="100" Header="Name" DisplayMemberBinding="{Binding Path=InventoryName}" />
                <GridViewColumn Width="50" Header="Qty" DisplayMemberBinding="{Binding Path=Qty}" />
                <GridViewColumn Width="50" Header="Type" DisplayMemberBinding="{Binding Path=Type}" />
            </GridView>
        </ListView.View>
    </ListView>

そして私のコードビハインド

    private void Open_Edit(object sender, RoutedEventArgs e)
    {
    var selectedObject = ingListLV.SelectedItems[0] as InventoryList;
    if (selectedObject == null)
    {
        return;
    }
    string name = selectedObject.ilName;
    MessageBox.Show(name);
    }

public class InventoryList
{
    public string ilName { get; set; }
    public decimal ilQty { get; set; }
    public string ilType { get; set; }
}

編集 ここで、リストビューにデータをロードしています

    private void LoadLV()
    {

        auroraDataEntities = new AuroraDataEntities();
        ObjectQuery<Inventory> inventories = auroraDataEntities.Inventories;
        //Returns only opjects with a quantity greater than 0, so it won't show anything you are out of
        var fillList = from q in inventories
                       where q.Qty > 0
                       select q;
        ingListLV.ItemsSource = fillList.ToList();
     }
4

1 に答える 1

1

In (デフォルト) ではSelectedItemsではなくSelectedItemを使用します。ListView.SelectionMode Single

var selectedObject = ingListLV.SelectedItem as Inventory;

[0]、複数選択で最初に選択された項目 (行) を参照します。

于 2013-08-04T23:17:52.730 に答える