3

WPF コマンド パラメーターが制限であることがわかりました。おそらくそれは、私がそれらを間違った目的で使用している兆候かもしれませんが、廃棄して別の方法をとる前に、まだ試しています.

コマンドを非同期で実行する仕組みを作ったのですが、データ入力が必要なものは使いづらいです。WPF コマンドの一般的なパターンの 1 つは、this. ただしthis、すべての依存関係プロパティにアクセスできないため、非同期コマンドではまったく機能しません。

私は次のようなコードになります:

<Button Command="{Binding ElementName=servicePage, Path=InstallServiceCommand}">
  <Button.CommandParameter>
     <MultiBinding Converter="{StaticResource InstallServiceParameterConverter}">
        <MultiBinding.Bindings>
           <Binding ElementName="servicePage" Path="IsInstalled"/>
           <Binding ElementName="localURI" Path="Text"/>
           <Binding ElementName="meshURI" Path="Text"/>
           <Binding ElementName="registerWithMesh" Path="IsChecked"/>
         </MultiBinding.Bindings>
      </MultiBinding>
  </Button.CommandParameter>
</Button>

また、InstallServiceParametersConverter クラス (および InstallServiceParameters) も必要です。

これを改善する明白な方法を見た人はいますか?

4

4 に答える 4

2

私のオープンソース プロジェクトである Caliburn を紹介します。ここで見つけることができます。問題の解決に最も役立つ機能は、ここに簡単に記載されています

于 2008-10-01T13:56:24.373 に答える
1

MVVMのようなものを使用してみてください:

現在の「ビュー」(ウィンドウ、ページ、アプリケーションにとって意味のあるもの)に表示されるすべてのデータを格納するクラスを作成します。

コントロールをこのクラスのインスタンスにバインドします。

クラスにいくつかのICommandプロパティを公開させ、ボタンのCommandプロパティをデータクラスの適切なプロパティにバインドします。すべてのデータは通常の日常のデータバインディングを使用してオブジェクトにすでに転送されているため、コマンドパラメータを設定する必要はありません。

オブジェクトを呼び出すICommand派生クラスがあります。いくつかの実装については、このリンクを参照してください。

http://dotnet.org.za/rudi/archive/2009/03/05/the-power-of-icommand.aspx

コマンドによって呼び出されたメソッド内で、必要なすべてのデータをパックし、バックグラウンドスレッドに送信します。

于 2009-03-15T09:53:07.050 に答える
1

コマンドは、UI とプログラム ロジックの間の密結合を避けるためのものです。ここで、あなたはそれを回避しようとしているので、苦痛を感じるでしょう。UI を他のオブジェクト (このデータを含む) にバインドしたい場合は、コマンドでそのオブジェクトを簡単に呼び出すことができます。MV-VM を検索してみるか、PRISM の例を見てください。

于 2008-10-15T11:46:13.610 に答える
0

適切なオブジェクトをリクエストできるようにするものが必要です。おそらく、親オブジェクトがプロパティとして公開できるこれらのパラメーターを格納するためだけにオブジェクトが必要になるでしょう。

実際にすべきことは、コマンドを同期させたままにし、新しいスレッドをスローするかコマンド マネージャーに渡す (ホーム ロール) ことによって非同期で実行することです。

于 2008-09-30T04:13:22.210 に答える