从VM的数据中提取

时间:2012-12-04 08:12:02

标签: wpf mvvm draw

我正在学习创建WPF应用程序而且我做了一个功课。 我必须创建一个wpf mvvm" tron lightcycle game",但遗憾的是卡住了。

在View(Mainwindow.xaml)中有一个Canvas。我应该画在这里。

...    
<Canvas Name="cnvs_game" Margin="5,5,5,5">
...

在ViewModel中有一个GameData类和一个Timer。 每次勾选GameData更新(GameTime,Player1CanvasPosition(Point),...)。

我将游戏时间投标到视图:

Mainwindow.xaml.cs:

...
<TextBlock Text="{Binding GameTime}" />
...

ViewModel.cs:

...
private GameData _GameData;
...
public String GameTime { get { return _GameData.GameTime.ToString(); } }
...

private void GameTimer_Tick(object sender, EventArgs e)
{
    _GameData.Step();
    OnPropertyChanged("GameTime"); // PropertyChanged with error handling
    OnPropertyChanged("Player1CanvasPosition ");
    OnPropertyChanged("Player2CanvasPosition ");
}

ViewTime中的GameTime刷新。这并不难。但我仍然不知道如何画画。

我应该如何获得Player1CanvasPosition并在那里绘制一个Rectangle(在Canvas中)。做这个的最好方式是什么?请帮帮我! :S

1 个答案:

答案 0 :(得分:2)

您可以像使用GameTime一样执行此操作,例如:

<Canvas Name="cnvs_game" Margin="5,5,5,5">
    <Rectangle Canvas.Left="{Binding Player1CanvasPositionX}" Canvas.Top="{Binding Player1CanvasPositionY}" ... />
    <Rectangle Canvas.Left="{Binding Player2CanvasPositionX}" Canvas.Top="{Binding Player2CanvasPositionY}" ... />
 ...

在ViewModel中创建调用OnPropertyChanged的Player1CanvasPositionX属性,然后在更改ViewModel中的属性时,矩形将移动。

编辑: 为了动态添加矩形,我将使用ItemsControl,它绑定到ObservableCollection的位置。 ItemsControl datatemplate将包含一个绑定到该位置的矩形。请查看此链接以获取更多详细信息WPF Canvas, how to add children dynamically with MVVM code behind