3

私は Windows 開発の初心者であり、もちろん Metro スタイル アプリ開発の初心者です。Data Binding の仕組みがよくわかりません。

私はアイテムのリストを持っています。

private List<Expense> _expenses = new List<Expense>();
public List<Expense> Items
{
    get
    {
        return this._expenses;
    }
}

XAMLにバインドします。(分割ページ テンプレートを使用します)

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        this.DefaultViewModel["Items"] = _data.Items;
    }

それから私はそれを表示します

<UserControl.Resources>
    <CollectionViewSource
        x:Name="itemsViewSource"
        Source="{Binding Items, Mode=TwoWay}"/>
</UserControl.Resources>

<ListView
    x:Name="itemListView"
    AutomationProperties.AutomationId="ItemsListView"
    AutomationProperties.Name="Items"
    Margin="120,0,0,60"
    ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
    SelectionChanged="ItemListView_SelectionChanged"
    ItemTemplate="{StaticResource DefaultListItemTemplate}"/>

これはうまくいきます。次に、ユーザーがボタンをクリックすると、新しいアイテムがリストに追加されます

_data.Items.Add(new Expense
{
    Total = 100,
    When = new DateTime(2013, 6, 6),
    For = "Myself"
});

ListView設定してから自動的に更新されることを期待していましたMode=TwoWayが、そうではありません。概念を誤解していて、リストを更新できませんか? そうでなければ、何が間違っていたのでしょうか?

4

1 に答える 1

7

コレクションに変更を加えた後に UI を更新するには、実装する必要がありますINotifyCollectionChanged。これにより、変更が発生したときに UI に通知され、変更の上に UI を再バインドして応答します。

ただし、このインターフェースの実装はかなり複雑です。代わりに代わりに使用するだけで、シナリオは問題なく動作するObservableCollection<T>はずList<T>です

private ObservableCollection<Expense> _expenses = new ObservableCollection<Expense>();
public ObservableCollection<Expense> Items
{
    get
    {
        return this._expenses;
    }
}
于 2012-04-17T14:19:45.273 に答える