1

シンプルなルーレットアプリを構築しています。プレーヤー (UI) は賭けのリストをまとめてテーブル オブジェクトに送信し、評価と支払いを行います。動作するコードがあり、ゲーム プロセスはスムーズに進みます。問題は、ターン後にプレイヤーの残高 (テキストブロック) またはベットリスト (リストビュー) を更新できないことです。欠落しているある種のグローバルウィンドウ更新コマンドがありますか、または何らかの方法で更新するためにこれらのそれぞれを手動で設定する必要がありますか?

4

2 に答える 2

2

WPFはこれらの値を自動的に更新しますが、状況が変わったときに通知する必要があります。通常、これはモデルオブジェクトでDependencyPropertiesを使用して実行されますが、INotifyPropertyChangedを実装することによっても実行できます。いずれの場合も、プロパティの値を更新すると、PropertyChangedイベントが呼び出されます。WPFは、値にバインドするときにこのイベントを自動的にサブスクライブし、変更が発生するとUIを更新します。この通知がないと、WPFはオブジェクトの値が変更されたかどうかを確認せず、変更が画面に反映されません。

于 2009-05-28T19:11:42.257 に答える
0

INotifyPropertyChangedを実装し、バランスとベットリストを使用しているコントロールにバインドするのはどうですか?

何かのようなもの:

public class Player : INotifyPropertyChanged
    {
        private int _balance;

        #region Properties

        public int Balance
        {
            get { return this._balance; }
            set
            {
                if (this._balance != value)
                {
                    this._balance = value;
                    NotifyPropertyChanged("Balance");
                }
            }
        }

        public BindingList<Bet> BetList { get; set; }

        #endregion // Properties

        private void NotifyPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }

    public class Bet
    {
        // some code
    }

バインディングリストの場合、バインドされているものすべてに変更を通知するインターフェイス(IRaiseItemChangedEvents)を実装しているため、何も実装する必要はありません。しかし、ここでも別のアプローチを使用している可能性があります。

于 2009-05-28T19:12:57.713 に答える