我正在尝试使用WPF,Prism和MVVM制作垄断游戏。 在我的视图上,我有一个分为几行和几列的网格。每个单元都是一个单独的游戏卡,例如一个城市。
我还有一个内容控件,可将玩家显示为筹码。
任务是相对于网格中的单元移动我的玩家。 我需要从ViewModel中执行此操作(我希望ViewModel以某种方式告诉我的View播放器位置)。请帮我解决这个问题。
我的观点:
<!--bottom row-->
<ContentControl Grid.Row="10" Grid.Column="10" Content="{Binding Cards[0]}" ContentTemplateSelector="{StaticResource CardTemplateSelector}"/>
<ContentControl Grid.Row="10" Grid.Column="9" Content="{Binding Cards[1]}" ContentTemplateSelector="{StaticResource CardTemplateSelector}"/>
...
<!--left column-->
<ContentControl Grid.Row="9" Grid.Column="0" Content="{Binding Cards[11]}" ContentTemplateSelector="{StaticResource CardTemplateSelector}"/>
<ContentControl Grid.Row="8" Grid.Column="0" Content="{Binding Cards[12]}" ContentTemplateSelector="{StaticResource CardTemplateSelector}"/>
...
<!--top row-->
<ContentControl Grid.Row="0" Grid.Column="0" Content="{Binding Cards[20]}" ContentTemplateSelector="{StaticResource CardTemplateSelector}"/>
...
<!--right column-->
...
<!--player chips-->
<ContentControl Grid.Row="10" Grid.Column="10" Content="{Binding Players[0]}" ContentTemplate="{StaticResource PlayerTemplate1}"/>
...
我期望的是: 1)模型掷骰子(实际上我已经做到了) 2)ViewModel获得此结果并将其转换为网格上的位置(有一些想法) 3)视图必须以某种方式获得该位置并移动我的播放器。
答案 0 :(得分:-1)
谢谢MarkFeldman!您的方法对我有所帮助。但是我现在有另一个问题))
此刻,我的玩家可以在游戏板上四处移动。这很棒!但是,我想一次一张地模拟纸牌的通过,而不是立即模拟到最后一张纸牌。首先,我尝试迈出第一步,thread.sleep(100),然后再次迈出正确的一步。但这导致程序完全冻结,直到芯片插入最终卡。
我将再感谢一个提示。
答案 1 :(得分:-1)
internal void MakeStep()
{
this.CardIndex++;
}
internal void MakeStep(int count)
{
Task.Factory.StartNew(() => this.StepByStep(count));
}
private void StepByStep(int count)
{
for (int i = count; i > 0; i--)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
this.MakeStep();
Debug.Print(this.CardIndex.ToString());
}), DispatcherPriority.Background);
Thread.Sleep(100);
}
}
这是我用于逐张模拟纸牌通过的解决方案。问题出在线程中!