[英]How to bind the content of the buttons with list of values in other xaml page?
嗨,我想编写一个游戏应用程序,由于这个原因,我有三个用户控件,每个用户控件都有多个按钮。 假设Usercontrol1有5个按钮Usercontrol2有6个按钮,依此类推...
现在在MainPage.xaml中,我有一个名为GameCanvas的画布,在运行时取决于难度级别,我在其中填充一个用户控件,然后在下一个层次中填充另一个用户控件,依此类推,例如GameCanvas.Children.Add(uc1);
等等
现在在主页上有一个值列表
List<int> listValues = new List<int>();
我正在构造函数中填充它,所以第一次listOfValues
包含5个数字,而这5个数字我想显示为userControl1
五个Button的内容。
在下一个级别中,我将生成6个数字的listOfNumbers
并希望向用户显示UserControl2并将这6个按钮的内容填充为这6个数字。 知道我该怎么做吗?
在GamePage
的构造函数中
我创造了
uc1 = new userControl1();
uc2= new userControl12();
当我第一次加载时在构造函数中
GameCanvas.Children.Add(uc1);
我将Buttons内容作为空值获取。 但是,如何用GamePage的listValues的值填充UserControl1
的Buttons
内容?
我找到了在这个问题中提出的问题的解决方案。 我研究了一些东西,并从一位Microsoft技术人员那里获得了帮助,并将其付诸实践。 由于代码的隐私问题,我将仅概述如何解决该问题。
我的问题是一个MainPage.xaml页和另一个userControl1.xaml页,usercontrol有一些按钮,按钮的内容将是在MainPage.xaml.cs中生成的一些listValues。
现在在用户控件中我编写了一个代码
<Grid>
<Button Content="{Binding Path=ListOfValues[0]}" Margin="109,140,101,109" />
<Button Content="{Binding Path=ListOfValues[1]}" Margin="18,86,212,162" />
<Button Content="{Binding Path=ListOfValues[2]}" Margin="218,206,12,43" />
</Grid>
和UserControl DataContext为
<UserControl.DataContext>
<local:MainWindow />
</UserControl.DataContext>
其中“本地”是您的应用名称。 UserControl中不会包含任何代码。
现在在MainPage.xaml中
<Grid Loaded="Grid_Loaded" >
<Canvas x:Name="GameCanvas" Margin="12,52,98,26" />
</Grid>
在后面的代码中,这一部分很重要。
首先定义一个属性
public List<int> ListOfValues
{
//with get, set and INotifyPropertyChanged implemented.
}
在MainPage的构造函数中写
public MainPage()
{
InitializeComponent();
this.DataContext = this;
}
并在MainPage_Loaded代码后面
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
_listofValues.Add(1);
_listofValues.Add(2);
_listofValues.Add(3);
var uc1 = new UserControl1(); //
uc1.DataContext = this;
GameCanvas.Children.Add(uc1);
}
运行应用程序。 您可以看到所有按钮Content都是ListOfValues的顺序相同。
这是一个简单的应用程序,没有MVVM,因此任何人都可以使用Command绑定实现MVVM并编写更新的答案。 希望它可以帮助有类似需求的许多用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.