1

C# を使用して WPF インターフェイスを作成しています。ディスプレイには、移動オブジェクトの現在の座標が表示されます。私がやっていることは、移動オブジェクトの現在の位置をチェックする関数を呼び出す間隔でスレッドをトリガーすることです。

注:現在の位置をチェックする関数は、他のクラス (別の .cs ファイル内) から呼び出され、私のインターフェイスはメイン ウィンドウである別のウィンドウにあります。

ウィンドウ インターフェイスに座標を表示するにはどうすればよいですか? あるクラス (.cs) で初期化された変数をインターフェイス (.xaml) の別のラベル ツールバーに割り当てる方法はありますか?

4

1 に答える 1

0

これを行う最も簡単な方法は、いくつかの を追加しTextBlock(または必要TextBoxに応じて)、それらをビュー モデルのプロパティにバインドすることです。

<TextBlock Text="{Binding Path=XCord}" />

トリックは、タイマーまたはバックグラウンド スレッドを使用しているため、UI スレッドで発生するようにプロパティ変更通知を同期する必要があることです。XCordしたがって、次のようなプロパティを実装できます。

    public string XCoord
    {
        get { return _xcoord; }
        set
        {
            if(!Application.Current.Dispatcher.CheckAccess())
            {
                Application.Current.Dispatcher
                    .BeginInvoke(new Action(() =>
                                            {
                                                _xcoord = value;
                                                NotifyPropertyChanged("XCoord");
                                            }));
            }
            else
            {
                _xcoord = value;
                NotifyPropertyChanged("XCoord");
            }
        }
    }

このチェックDispatcherは、間違ったスレッドからプロパティを設定しようとしていないことを確認するために行われます。設定されている場合はBeginInvoke、UI スレッドで作業を行うために使用されます。そうすれば、PropertyChangedイベントが発生し、バインディングが値を読み取って UI を変更しようとすると、バックグラウンド スレッドではなく UI スレッドから実行されます。

于 2012-06-07T19:27:17.270 に答える