繁体   English   中英

如何将按钮的内容与其他XAML页面中的值列表绑定?

[英]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的值填充UserControl1Buttons内容?

我找到了在这个问题中提出的问题的解决方案。 我研究了一些东西,并从一位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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM