0
我對ICommand的和RelayCommand何時使用ICommand包裝RelayCommand以及何時使用Just ReplayCommand?
有點糊塗如果我做這個自動完成控制
public RelayCommand<KeyEventArgs> AutoCompleteCommand
{
get;
private set;
}
public MyConstructor()
{
AutoCompleteCommand = new RelayCommand<KeyEventArgs>((e) =>
{
//Check if the key pressed is <Enter>
//if it is, check also if the SearchPropertyValue is not String.Empty then
var d = e;
//Should it return true or false?
});
}
在XAML:
<toolkit:AutoCompleteBox x:Name="acbStore" Margin="154,196,29,0" VerticalAlignment="Top" RenderTransformOrigin="0.6,0.083" Height="162"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding AutoCompleteCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
什麼也沒有發生。
如果我這樣做
public ICommand AutoComplete
{
get
{
return new RelayCommand<KeyEventArgs>(e =>
{
var key = e.Key;
});
}
}
在XAML:
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding AutoComplete, Mode=OneWay}"
PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<toolkit:AutoCompleteBox x:Name="acbStore" Margin="154,196,29,0"
VerticalAlignment="Top" RenderTransformOrigin="0.6,0.083" Height="162"/>
它的工作原理和我的命令被觸發。
同樣從我看到的所有例子中,RelayCommand似乎總是在構造函數中去。我可以將它粘在其他任何地方,因爲它會使構造函數非常混亂。
您沒有綁定第一個示例中的命令,因此它不會觸發。無論您使用'ICommand'還是'RelayCommand <>',您都必須將其綁定到您的xaml中。 –
RelayCommand與其他任何對象一樣。你可以在任何你想要的地方實例化它,但它需要被實例化,並且它需要綁定到你的XAML的某個地方。 – LBugnion
@AlaaMasoud - 抱歉它實際上存在,但我想我沒有用「代碼格式化程序」突出顯示它,所以沒有顯示它。 – chobo2