UserControl内容未更新

时间:2017-04-29 14:39:17

标签: c# xaml user-controls uwp

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

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

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

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

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

UPD:如果我从

更改SelectedItemsView.xaml的第28行
ItemsSource="{x:Bind SelectedItems}"

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

(并将x:Name="SelectedItemsViewRoot"添加到用户控件属性)。它可以根据需要运行。所以新的问题到了 - 这是正确的方法吗?我认为Binding是一种传统,x:Bind是新应用中应该使用的新方法。

1 个答案:

答案 0 :(得分:1)

可以使用groupUseEntireRow: true,但如果你想坚持使用import matplotlib as mp mp.use('Tkagg') ,你可以使用OneWay模式(而不是默认的OneTime)。例如:import numpy as np import matplotlib.pyplot as plt n=1e3 x = 1-2*np.random.random(int(n)) y = 1-2.*np.random.random(int(n)) insideX, insideY = x[(x*x+y*y)<=1],y[(x*x+y*y)<=1] outsideX, outsideY = x[(x*x+y*y)>1],y[(x*x+y*y)>1] fig, ax = plt.subplots(1) ax.scatter(insideX, insideY, c='b', alpha=0.8, edgecolor=None) ax.scatter(outsideX, outsideY, c='r', alpha=0.8, edgecolor=None) ax.set_aspect('equal') fig.show()

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

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