私の WPF アプリケーションには、TextBox と Button があります。ボタンには、テキストに対して何かを行うコマンドにバインドされたコマンドがあります。
<TextBox x:Name="_textBox"></TextBox>
<Button Command="{Binding SomeCommand}"
CommandParameter="{Binding ElementName=_text, Path=Text}"
Content="Trigger SomeCommand" />
ここで、ボタンをクリックして TextBox もクリアするアクションが必要です。これを行う最善の方法は何ですか?2 つのオプションが表示されます。
Button にも Click イベントを追加して、テキストを明確にすることができます。これは、アクションが正しく実行される順序に依存して、アクションを 2 つの場所に分割することになるため、私には良い考えのようには思えません。
ここで使用したオプションは、TextBox.Text プロパティの代わりに TextBox 全体を渡すことです。そうすることで、コマンドは最初にテキストを取得して使用し、次に TextBox をクリアできます。私のバインディングは同じですが、「パス」はありません:
<TextBox x:Name="_textBox"></TextBox>
<Button Command="{Binding SomeCommand}"
CommandParameter="{Binding ElementName=_text}"
Content="Trigger SomeCommand" />
そして、私のコマンドの重要な部分:
public class SomeCommand : ICommand
{
....
public void Execute(object parameter)
var textBox = parameter as TextBox;
if (inputTextBox == null) return;
DoSomething(textBox.Text);
textBox.Clear();
}
}
これに関する私の問題は、コマンドが UI コンポーネントに依存するようになったことと、UI がコマンドに実際に変更を加えることに依存していることです。私はこれに満足しているわけではありません。より良い方法はありますか?