我正在制作一个Yahtzee游戏,试图学习WPF/MVVM。我已经取得了一些进展,但是我正在努力如何使用ICommand来给我的骰子一个随机的int值(“滚动”)。所以我有一个骰子类是这样的:如何使用ICommand更改模型的属性?
public class Die : INotifyPropertyChanged
{
int _id;
int _roll;
bool _checked;
}
这些特性都得到了构造是这样的:
public bool Checked
{
get { return _checked; }
set { _checked = value;
OnPropertyChanged("Checked"); }
}
“_id”只是一个跟踪骰子的方式,甚至不知道它的需要。 “_roll”是一个随机值,这是一个问题,“_checked”是一个复选框,玩家可以检查是否他想保留这个值用于下一次投掷。
我的视图模型是这样的:
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)
{
}
}
所以两件事情我不明白如何创造是如何看看每个骰子的_checked属性是否为假,如果选中是false,则给当前的Die一个新的数字。点击我的“Roll Dice”按钮后,我还需要循环所有5个骰子。
- 我需要做RollDiceCommand到它自己的文件,或者把它与VM/M?
- 如何获取_checked属性作为CanExecute参数
- 如何随机化一个骰子的_roll值,我猜问题2也解决了这个问题。
我不知道该告诉你什么,它在这里工作得很好。或者至少它编译和运行没有崩溃。 编辑:我明白你的意思,现在就编辑它。 – Tom
我今天很困,我看到了,我不知道为什么我把“在那里。” – Tom