Когда вы ссылаетесь на * ngIf, предложение else не может быть произвольным компонентом, но это должен быть шаблон ng.
Например,
в компоненте, где у вас есть исходный код, подобный следующему:
Полученный исходный код должен выглядеть следующим образом:
Свойство Command класса KeyBinding не поддерживает привязку данных. Эта проблема будет решена в .NET 4.0, и вы сможете увидеть ее в следующей версии .NET 4.0 Beta 2.
Я не думаю, что вы можете сделать это из XAML, по причинам, которые вы описываете.
В итоге я сделал это в коде программной части. Хотя это код, это всего лишь одна строка кода, и все же довольно декларативный, так что я могу жить с этим. Тем не менее, я'
Предполагая, что ваши RoutedCommands определены статически:
#region DeleteSelection
/// <summary>
/// The DeleteSelection command ....
/// </summary>
public static RoutedUICommand DeleteSelection
= new RoutedUICommand("Delete selection", "DeleteSelection", typeof(ChemCommands));
#endregion
Свяжите в XAML таким образом:
<Canvas.InputBindings>
<KeyBinding Key="Delete" Command="{x:Static Controls:ChemCommands.DeleteSelection}" />
</Canvas.InputBindings>
С уважением,
Тим Хотон
Я создаю привязку Key в моей модели представления, которая связывает команду и Key следующим образом
this.KeyBinding = new KeyBinding();
//set the properties
this.KeyBinding.Command = this.Command;
this.KeyBinding.Key = this.Key;
//modifier keys may or may not be set
this.KeyBinding.Modifiers = this.ModifierKeys;
, затем я создаю коллекцию элементов InputBinding в корне моей модели представления и добавляю их в окна InputBindings в коде моего окна за
foreach (var item in applicationViewModel.InputBindingCollection) {
this.InputBindings.Add(item);
}
это плохой тон делать что-то в коде, который я знаю, но я еще не знаю, как сделать привязку, однако я все еще работаю над этим. :) Единственное, что дает мне этот doent, - это список модификаторов ключевых команд в меню, но это еще не все.
Вы можете создать подкласс KeyBinding, добавить свойство зависимости CommandBinding
, которое задает свойство Command, а затем добавить его в XAML, как любую другую входную привязку.
public class RelayKeyBinding : KeyBinding
{
public static readonly DependencyProperty CommandBindingProperty =
DependencyProperty.Register("CommandBinding", typeof(ICommand),
typeof(RelayKeyBinding),
new FrameworkPropertyMetadata(OnCommandBindingChanged));
public ICommand CommandBinding
{
get { return (ICommand)GetValue(CommandBindingProperty); }
set { SetValue(CommandBindingProperty, value); }
}
private static void OnCommandBindingChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var keyBinding = (RelayKeyBinding)d;
keyBinding.Command = (ICommand)e.NewValue;
}
}
XAML:
<Window.InputBindings>
<RelayKeyBinding
Key="PageUp"
CommandBinding="{Binding SelectPreviousLayerCommand}" />
</Window.InputBindings>