我正在使用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是viewModel,它有属性CurrenciesViewModel(型号名称CurrencyListViewModel),它有属性Currencies(型号名称CurrencyList),它有属性Currencies,它是ObservableColletion
所以当我添加像这样的对象时,这是有用的
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:Binding with Binding,一切正常。
如果你想要家伙,我可以复制粘贴所有课程。但请告诉我wtf;)
答案 0 :(得分:4)
问题是默认绑定在{x:Bind} vs {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} "/>