私はWPF/MVVMを学ぶためにYahtzeeゲームを作っています。私はいくつかの進歩を遂げましたが、私は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"は、次の投げにこの値を保持したい場合、プレイヤーがチェックを入れることができるチェックボックスです。
私の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)
{
}
}
だから私は作成する方法を理解できない二つのものがどのようにあります各ダイスの_checkedプロパティがfalseかどうかを確認し、falseの場合は現在のDieに新しい番号を与えます。私はまた、 "ロールダイス"ボタンを押した後、5つのダイスすべてをループする必要があります。
- RollDiceCommandを独自のファイルにする必要がありますか、それともVM/Mに入れる必要がありますか?
- CanExecuteパラメータとして_checkedプロパティを取得する方法
- 1つのダイスの_roll値をランダム化する方法は、2の質問もこの問題を解決すると思います。
私はあなたに何を伝えるべきかわかりません、ここでうまくいきます。少なくとも、コンパイルしてクラッシュすることなく実行できます。 編集:私はあなたが今何を意味するかを見て、それを編集するつもりです。 – Tom
今日私は眠くて、私はなぜそこに置くのか分かりません。 – Tom