【发布时间】:2017-09-11 14:11:22
【问题描述】:
我正在制作一个 Yahtzee 游戏以尝试学习 WPF/MVVM。我已经取得了一些进展,但我正在努力研究如何使用 ICommand 给我的骰子一个随机的 int 值(“滚动”)。所以我有一个像这样的骰子类:
public class Die : INotifyPropertyChanged
{
int _id;
int _roll;
bool _checked;
}
这些属性都有这样的构造函数:
public bool Checked
{
get { return _checked; }
set { _checked = value;
OnPropertyChanged("Checked"); }
}
“_id”只是一种跟踪骰子的方法,甚至不确定它是否需要。 “_roll”是一个随机值,这是手头的问题,“_checked”是一个复选框,如果玩家想在下次投掷时保留这个值,可以勾选。
我的 ViewModel 如下所示:
public class DiceViewModel : INotifyPropertyChanged
{
Die _die;
public DiceViewModel()
{
myDices = new ObservableCollection<Die>()
{
new Die { Id = 1, Roll = 0, Checked = false },
new Die { Id = 2, Roll = 0, Checked = false },
new Die { Id = 3, Roll = 0, Checked = false },
new Die { Id = 4, Roll = 0, Checked = false },
new Die { Id = 5, Roll = 0, Checked = false },
};
}
}
我创建命令的最佳尝试是这样的:
public class RollDiceCommand : ICommand
{
private Action<object> _method;
public event EventHandler CanExecuteChanged;
public RollDiceCommand(Action<object> method)
{
_method = method;
}
public bool CanExecute (object parameter)
{
if ((bool)parameter == true)
{
return true;
}
else
return false;
}
public void Execute(object parameter)
{
}
}
所以我无法理解如何创建的两件事是如何查看每个 dice 的 _checked 属性是否为假,如果检查为假,则给当前 Die 一个新数字。在按下“掷骰子”按钮后,我还需要遍历所有 5 个骰子。
- 我需要将 RollDiceCommand 放入它自己的文件中还是与 VM/M 一起放入?
- 如何获取 _checked 属性作为 CanExecute 参数
- 如何随机化一个 Dice 的 _roll 值,我猜问题 2 也解决了这个问题。
【问题讨论】:
-
我不知道该告诉你什么,它在这里工作正常。或者至少它可以编译并运行而不会崩溃。编辑:我明白你的意思了,我要编辑它。
-
我今天困了我不知道为什么我把"放在那里。
标签: .net wpf mvvm observablecollection icommand