绑定和x:Bind,一个正在工作

Binding and x:Bind, one is working

我正在用绑定和 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 是具有 属性 CurrenciesViewModel(模型名称 CurrencyListViewModel)的 viewModel,其中具有 属性 货币(模型名称 CurrencyList),其中具有 属性 货币它是 ObservableCollection

所以当我像这样添加对象时这是有效的

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

但是当我使用一种方法通过我的 DataProvider 下载我的模型时(使用 xml 简单休息)

Task<CurrencyList> GetCurrencyList();

所以我的主 ViewModel 中的第一个 属性 CurrencyViewModel 是这样的

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

那我的listView是空的!我检查了我的数据是否已下载,是的,它是...... 我用绑定更改了 x:Bind,一切正常。

如果你们需要,我可以复制粘贴所有 类。但请告诉我 wtf ;)

问题在于默认绑定在 {x:Bind} 与 {Binding} 中的工作方式。在 {x:Bind} 中,默认绑定是 OneTime,但在 {binding} 中,默认绑定是 OneWay。因此,即使您更新视图模型,默认情况下 x:binding 中的数据也不会更改。

To Resolve Change 
<TextBlock Foreground="Red" Text="{x:Bind Name}"/>
To:
<TextBlock Foreground="Red" Text="{x:Bind Name Mode=OneWay} "/>