用户控件内容未更新

UserControl content not updating

我正在为自己创建一个简单的 UWP 应用程序,但对绑定和所有这些东西的工作原理缺乏了解。不知道如何更好地解释它所以我创建了一个简单的例子:https://gist.github.com/anonymous/744dc688d0663a3c14b7a2fc424316f8

该程序在主屏幕上有一个 select 可用项目列表。我可以 select 多个项目,按下一个按钮,程序将显示新的浮动面板,其中包含 selected 项目(我在我的原始程序中进一步管理这些项目)。我希望这个面板是单独的控件,因为我的 MainPage 已经被代码填满了。

问题是。当我第一次点击按钮时 - 它按我预期的那样工作。但是,当我更改 selected 项目并再次单击按钮时,它会显示包含第一个 selection 项目的面板。

我的问题是 - 如何让它发挥作用?我有一种感觉,它必须是 INotifyPropertyChanged 的东西,但无法理解它。

我也很乐意听到总体建议。我不是 C# 开发人员。我实际上是系统。管理员,但我知道一点python,我在大学里学过Delphi 7。所以我在创建这个应用程序的过程中学习了 c#。

UPD: 如果我将 SelectedItemsView.xaml 的第 28 行从

更改为
ItemsSource="{x:Bind SelectedItems}"

ItemsSource="{Binding SelectedItems, ElementName=SelectedItemsViewRoot}"

(并将 x:Name="SelectedItemsViewRoot" 添加到用户控件属性)。它根据需要工作。所以新的问题来了——这是正确的方法吗?我认为 Binding 是一种遗留的方法,而 x:Bind 是应该在新应用程序中使用的较新方法。

可以使用 {Binding},但如果您想坚持使用 {x:Bind},您可以使用 OneWay 模式(而不是默认的 OneTime)。例如:{x:Bind SelectedItems, Mode=OneWay}.

我强烈建议您阅读这两个官方教程: Data binding overview and Data binding in depth.

简而言之,{Binding} 不是遗产。它实际上更灵活一点,但它是在运行时执行的,而 {x:Bind} 是在编译时执行的,因此性能更高。