1

我正在学习创建 WPF 应用程序并且我有一个家庭作业。我必须创建一个 wpf mvvm “tron lightcycle 游戏”,但不幸被卡住了。

在视图 (Mainwindow.xaml) 中有一个画布。我应该在这里画画。

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

在 ViewModel 中有一个 GameData 类和一个 Timer。GameData 的每个刻度都会更新(GameTime,Player1CanvasPosition (Point),... )。

我将 Gametime 竞标到 View 中,如下所示:

主窗口.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 ");
}

视图中的 GameTime 刷新。这并不难。但是我还是不知道怎么画。

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

4

1 回答 1

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 中的属性时,矩形将移动。

编辑:为了动态添加矩形,我将使用绑定到 ObservableCollection 位置的 ItemsControl。ItemsControl 数据模板将包含一个绑定到该位置的矩形。查看此链接以获取更多详细信息WPF Canvas,如何使用 MVVM 代码动态添加子项

于 2012-12-04T08:51:07.160 回答