如何将按钮Content与WP8中的数字列表绑定?

时间:2013-09-04 15:31:18

标签: c# wpf mvvm windows-phone-8

首先让我告诉你,我想要实现的目标。我希望当一个窗口加载它时会创建很多按钮,比如现在运行时的10个按钮我希望这个Button.Content绑定一些listvalues,这是一个包含10个数字的列表。

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

我想在MVVM中这样做,所以我的方法是在模型中我有public int ListNumbers属性,并定义了OnPropertyChanged事件。现在在视图模型中,如何使用大约10个整数值填充列表listvalues(这对MVVM来说是新的,这就是我要问的原因)。这十个值将用于生成运行时的10个按钮的内容。在MainPage的listvalues方法中填充MainPage_Loaded之后,如何使用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); 这不是将按钮放在所需的位置。但是现在这是我的代码如何为listNumbers值分配btnNew.Content?

请帮忙。

任何链接或任何精心解答的答案都适合我......

由于

1 个答案:

答案 0 :(得分: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中创建Button Content时设置它,这是正确的。您只需添加不必要的图层来设置按钮的内容。