Я разрабатываю приложение WPF с MVVM. В коде XAML у меня есть Grid с его DataContext, указывающим на ViewModel, и мне нужно знать, можно ли изменить DataContext во время выполнения, чтобы получить доступ к событию по его коду.WPF. Измените DataContext на привязку события для доступа к коду в проекте MVVM
Code-за для зрения:
public partial class MainWindow : Window
{
public MainWindow()
{
this.DataContext = new MainViewModel();
InitializeComponent();
}
private void ValidationEvent(object sender, ValidationErrorEventArgs e)
{
//Something useful
}
}
Вот код, который я попробовал в XAML:
<Grid Validation.Error={Binding Path=ValidationEvent RelativeSource={RelativeSource Self}}/>
код XAML сгенерирует XamlParseException говорить, что это невозможно сделать Связывание с «AddErrorHandler», что это возможно только для DependencyProperty для объекта DependencyObject.
Я не хочу менять DataContext Grid, потому что внутри него есть элементы, которые получают доступ к свойствам MainViewModel, поэтому я просто хочу изменить DataContext для привязки события Validation.Error ... Если это возможно ...
Спасибо.
Что вы хотите сделать внутри этого обработчика событий и почему его нельзя обрабатывать в модели представления? –
Простое тестирование (поэтому событие пуст). Да, это можно обработать в ViewModel, но поскольку это событие, я не могу связать его напрямую с ICommand, мне пришлось использовать что-то вроде «EventToCommand» MVVM Light, и я хочу знать, если это абсолютно необходимо. – MorgoZ
Связывание используется, чтобы сообщить WPF, куда идти, чтобы получить значение. Вы можете изменить источник привязки, чтобы сказать, что он должен идти куда-то, кроме текущего DataContext, для получения значения, как в вашем коде, используя «RelativeSource Self», чтобы изменить источник для этой привязки к самому объекту Grid. Вместо этого вы можете изменить его как объект MainWindow (я бы рекомендовал либо использовать «ElementName», либо «RelativeSource» в «x: Type Window»), однако это не изменит здесь две основные проблемы: «События не знать, как читать привязку, а ValidationEvent - это метод, а не свойство. – Rachel