我正在为自己创建一个简单的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
是新应用中应该使用的新方法。
答案 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 overview和Data binding in depth。
简而言之,{Binding}
不是遗产。它实际上更灵活,但它在运行时执行,而{x:Bind}
在编译时执行,因此性能更高。