在我的WPF應用程序中,我有一個TextBox和一個按鈕。該按鈕有一個命令綁定到一個命令,該命令將對文本執行某些操作。從命令修改用戶界面 - 在WPF中使用命令綁定
<TextBox x:Name="_textBox"></TextBox>
<Button Command="{Binding SomeCommand}"
CommandParameter="{Binding ElementName=_text, Path=Text}"
Content="Trigger SomeCommand" />
現在,我想按一下按鈕,也清除文本框的作用。這樣做的最好方法是什麼?我看到兩個選項:
我也可以在按鈕上添加Click事件 - 使其清除文本。這聽起來對我來說不是一個好主意,因爲我會在兩個地方分割行動,依靠他們執行的順序是正確的。
我現在使用的選項是傳遞整個TextBox而不是TextBox.Text屬性。這樣做的命令可以首先獲取文本,使用它,然後清除文本框。我的結合是一樣的,但沒有「路徑」:
<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取決於該命令以實際對其進行一些修改。我對此並不滿意。有沒有更好的辦法?
我正在使用MVVM模式,聽起來你是對的。我會將textfield綁定到相同ViewModel的某個屬性,該屬性包含需要清除它的命令。我相信這聽起來很合理。明天會有更仔細的觀察。謝謝! – stiank81 2010-02-08 22:12:13
請做,我相信它會幫助你。 – 2010-02-08 23:22:04
你是對的。沒有做到這一點酷似提出,但實質上我存儲在視圖模型的價值,使該命令使用存儲在視圖模型的價值,也很清楚它之後。謝謝! – stiank81 2010-02-09 11:21:37