0

Bindings と x:Bind を使用していくつかのテストを行っているところ、興味深いことがわかりました。

XAML

<ListView Background="White" ItemsSource="{x:Bind ViewModel.CurrenciesViewModel.Currencies.Currencies}">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="model:Currency">
                    <StackPanel>
                        <TextBlock Foreground="Red" Text="1"/>
                        <TextBlock Foreground="Red" Text="{x:Bind Name}"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
</ListView>

最初の x:Bind は、プロパティ Currencies を持つプロパティ Currencies (モデル名 CurrencyList) を持つプロパティ CurrenciesViewModel (モデル名 CurrencyListViewModel) を持つ viewModel で、ObservableColletion です。

これは、このようなオブジェクトを追加するときに機能します

CurrenciesViewModel.Currencies.Currencies.Add(new Currency() { Name = "test" });
CurrenciesViewModel.Currencies.Currencies.Add(new Currency() { Name = "test2" });

しかし、1 つのメソッドを使用して DataProvider (xml を使用した単純な残り) でモデルをダウンロードするとき

Task<CurrencyList> GetCurrencyList();

したがって、メイン ViewModel の最初のプロパティ CurrencyViewModel は次のようになります

CurrenciesViewModel = new CurrencyListViewModel(await DataProvider.GetCurrencyList());

それから私のlistViewは空です! データがダウンロードされているかどうかを確認しましたが、そうです... x:Bind を Binding に変更しましたが、すべてが機能しています。

必要に応じて、すべてのクラスをコピーして貼り付けることができます。でも教えてくださいwww

4

1 に答える 1

3

問題は、デフォルトのバインドが {x:Bind} と {Binding} でどのように機能するかです。{x:Bind} では既定のバインディングは OneTime ですが、{binding} では既定のバインディングは OneWay です。したがって、viewmodel を更新しても、デフォルトでは x:binding のデータは変更されません。

To Resolve Change 
<TextBlock Foreground="Red" Text="{x:Bind Name}"/>
To:
<TextBlock Foreground="Red" Text="{x:Bind Name Mode=OneWay} "/>
于 2015-10-08T23:28:29.223 に答える