0

首先让我告诉你,我想要实现什么。我希望当一个 Windows 页面加载时它会创建很多按钮,比如现在在运行时有 10 个按钮我希望它Button.Content与一些列表值绑定,这是一个 10 个数字的列表。

public List<int> listvalues = new list<int>();

我想在 MVVM 中执行此操作,所以我的方法是在我拥有public int ListNumbers 属性的模型中,并OnPropertyChanged定义了事件。现在在视图模型中,我如何listvalues用大约 10 个整数值填充一个列表(这对 MVVM 来说是全新的,这就是我要问的原因)。这十个值将用于运行时生成的 10 个按钮的内容。在填写MainPagelistvaluesMainPage_LoadedMethod 后,如何将 Button 的 Content 与listvalues.

为了更好地理解我的要求...

我有以下 XAMl 代码

<Canvas x:Name="GameCanvas" Background="Bisque" Height="480" Width="480" />MainPage.xaml

所以在后面的代码中

int locationFirst = 25;
int locationSecond = 100;

char SeatValue = 'A';

int row = 3;
int column = 3;

    public GamePage()
    {
        InitializeComponent();

        for (int x = 1; x <= row; x++)
        {
            for (int i = 1; i <= column; i++)
            {
                CreateButtons(SeatValue.ToString() + i, locationFirst, locationSecond);
                locationFirst = locationFirst + 130;
            }
            locationFirst = 25;
            locationSecond = locationSecond + 50;
        }

    }

createButtons 代码是

Button btnNew = new Button();
btnNew.Name = btnName;
btnNew.Margin = new Thickness(btnPointFirst, btnPointSecond, 0, 0);
btnNew.Width = 100;
btnNew.Height = 70;
GameCanvas.Children.Add(btnNew);

在 Windows Phone 中我发现了一个问题,就是没有 btnNew.Location(X,Y);

所以在运行时我必须使用 btnNew.Margin = new Thickness(btnPointFirst, btnPointSecond, 0, 0); 哪个没有将按钮放在所需的位置。但是,这是我的代码,现在如何为 btnNew.Content 分配listNumbers值?

请帮忙。

任何链接或任何详细的答案对我来说都很好......

谢谢

4

1 回答 1

1

我希望我理解这个

public GamePage()
{
    InitializeComponent();
    this.DataContext = GamePageViewModel();
    for (int x = 1; x <= row; x++)
    {
        for (int i = 1; i <= column; i++)
        {
            CreateButtons(SeatValue.ToString() + i, locationFirst, locationSecond);
            locationFirst = locationFirst + 130;
        }
        locationFirst = 25;
        locationSecond = locationSecond + 50;
    }

}

public class GamePageViewModel
{
   //List of numbers to put e.g. List<int>
   //Change PropertyNameOfTheViewModel here to properties, say 10 properties e.g, public int Content { get; set; }
} 

Button btnNew = new Button();
btnNew.Name = btnName;
btnNew.Margin = new Thickness(btnPointFirst, btnPointSecond, 0, 0);
btnNew.Width = 100;
btnNew.Height = 70;
btnNew.SetBinding(Button.ContentProperty,new Binding("PropertyNameOfTheViewModel");

但是,我不建议在 ViewModel 中执行此类操作,因为这是不必要的,如果您计划在 UI 中显示的内容来自数据库/业务逻辑,则仅使用与 ViewModel 的绑定。从 1 到 10 设置按钮内容不会在 ViewModel 中,如果继续,您将在 ViewModel 中得到不必要的代码,从而破坏 MVVM 模式。

我的问题是,为什么你必须通过绑定来做到这一点?只需在 MainPage.xaml.cs 中创建按钮内容时设置它,这是正确的。您只是添加不必要的图层来设置按钮的内容。

于 2013-09-04T19:39:15.897 回答