То, как вы используете привязку команд, отличается от того, как они используются в MVVM. Обычно вы объявляете объявление DelegateCommand
в вашей виртуальной машине, которое будет выполнять некоторые действия в виртуальной машине на основе действия пользовательского интерфейса (например, нажатие кнопки). Поскольку вы ищете противоположный путь, вам, вероятно, будет лучше использовать событие, исходящее от вашей виртуальной машины, которое затем может быть обработано ExportPrintGridControl
. В зависимости от того, как установлены отношения, вы можете объявить обработчик событий в XAML в объявлении экземпляра виртуальной машины (не похоже на это в вашем случае) или в вашем управляющем коде, просто возьмите DataContext
и приведите его к ваша виртуальная машина или (лучше) интерфейс, который включает в себя событие для подписки.
p.s. Ваш DependencyProperty
в настоящее время настроен так, что все, что не относится к вашему классу, может установить его, вызывая SetValue
(как и все XAML). Я понимаю, почему вы настроили его таким образом, чтобы попытаться использовать его как привязку «только для push», но вот лучшая реализация «только для чтения» для ситуаций, когда вам это действительно необходимо:
private static readonly DependencyPropertyKey PrintCommandPropertyKey = DependencyProperty.RegisterReadOnly(
"PrintCommand",
typeof(ICommand),
typeof(ExportPrintGridControl),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));
public static readonly DependencyProperty PrintCommandProperty = PrintCommandPropertyKey.DependencyProperty;
public ICommand PrintCommand
{
get { return (ICommand)GetValue(PrintCommandProperty); }
private set { SetValue(PrintCommandPropertyKey, value); }
}