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

时间:2015-10-08 21:29:19

标签: c# binding uwp xbind

我正在使用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;)

1 个答案:

答案 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} "/>