首先让我告诉你,我想要实现的目标。我希望当一个窗口加载它时会创建很多按钮,比如现在运行时的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?
请帮忙。
任何链接或任何精心解答的答案都适合我......
由于
答案 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时设置它,这是正确的。您只需添加不必要的图层来设置按钮的内容。