1

私はこのリストビューとボタンを持っています:

<ListView x:Name="MyList" ItemsSource="{Binding}" Grid.Row="1"></ListView>
<Button x:Name="Add" Content="Add Item" Click="Add_Click" Grid.Row="2" />

文字列のリストを初期化し、ListView に割り当てます。

List<string> names;

private void FillListView()
{
    names = new List<string>();
    names.Add("Foo");
    MyList.DataContext = names;
}

private void Add_Click(object sender, RoutedEventArgs e)
{
    MyList.Items.Add("Bar");
}

ListView にもう 1 つの文字列を追加するハンドラーもありますが、ボタンをクリックすると、Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) が発生します。

次のように、新しい文字列をコレクションに直接追加することも試みました。

private void Add_Click(object sender, RoutedEventArgs e)
{
    names.Add("Bar");
}

この場合、ListView は更新されず、タッチすると、Value が例外範囲 0x80070057 内に収まりません

コレクションを ListView にバインドしてから項目を追加するにはどうすればよいですか?

4

1 に答える 1

2

ListView 自体ではなく、ViewModel を介して追加を行うため、ここのコードは役に立ちません。

private void Add_Click(object sender, RoutedEventArgs e)
{
    names.Add("Bar");
}

namesのタイプをList からObservableCollectionに変更するだけで、アイテムが追加/削除されたときにバインディング エンジンに通知され、変更が UI に反映されます。

    ObservableCollection<string> names;

    private void FillListView()
    {
        names = new ObservableCollection<string>();
        names.Add("Foo");
        MyList.DataContext = names;
    }
于 2013-01-27T19:08:19.827 に答える