3

「実行」ボタン、結果コントロール、処理コントロールの 3 つのコントロールを持つユーザー ウィンドウがあります。私の目標は、実行が押された後に処理コントロールを表示し、実行メソッドが終了したら非表示にすることです。

ただし、処理コントロールは表示されると思ったときに表示されません...代わりに、ユーザー入力を促す別のウィンドウを作成するコールバック関数が呼び出された場合にのみ表示されます。

処理コントロールは、ProcessingBoolToVis コンバーターを介してビューモデルの bool にバインドされた可視性を持っています。execute メソッドはProcessing、開始時に true に設定され、終了時に false に設定されます。私のビューモデルが実装するProcessing呼び出しのセッターOnPropertyChanged.INotifyPropertyChanged.

    private bool _processing;
    public bool Processing
    {
        get
        { return _processing; }
        set
        {
            _processing = value;
            this.OnPropertyChanged("Processing");
        }
    }

    private RelayCommand _search;
    public RelayCommand Search
    {
        get { return _search ?? (_search = new RelayCommand(p => OnSearch(), p => CanSearch())); }
    }
    private void OnSearch()
    {
        this.Processing = true;

        DoWork(delegate callBack);

        this.Processing = false;
    }

XAML の一部:

    <BooleanToVisibilityConverter x:Key="BoolToVis" />

    <me:ProcessingControl Visibility="{Binding Path=Processing, Converter={StaticResource ResourceKey=BoolToVis}}"/>
4

1 に答える 1

0

タスクまたはバックグラウンド ワーカーを使用して DoWork を実行し、タスクまたはバックグラウンド ワーカーを開始する前に Processing=true を設定し、タスクの終了時に false にします。これにより、Processing コントロールの表示と非表示が有効になります。タスクまたはバックグラウンド ワーカーで bool Processing の値をチェーンする場合は、必ずディスパッチャ経由で呼び出すようにしてください。

于 2013-10-15T16:32:17.947 に答える