2015-02-12 2 views
0

Я пытаюсь реализовать решение для проверки ошибок, описанное here, но я не могу понять, как это сделать. В верхнем ответ, методICommand pass CanExecute с отправителем в viewmodel

private void CanExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = IsValid(sender as DependencyObject); 
} 

получает отправитель и CanExecuteRoutedEventArgs с точки зрения. Это означает, что метод должен быть реализован в представлении. Как это? CanExecute - это свойство класса Command, которое должно использоваться только в классе viewmodel. Поскольку вытекающие из интерфейса ICommand только позволяет после внедрения:

public bool CanExecute(object parameter) 
{ 
    throw new NotImplementedException(); 
} 

Как я должен receieve информации об объекте в ViewModel и передать их методе CanExecute командования?

Вот моя текущая реализация, я пробовал работать над этим, но без передачи метода делегату это бесполезно.

Вид:

<Button Command="{Binding Path=GenerateBinaryFileCommand}"> 
    <Button.CommandBindings> 
    <CommandBinding CanExecute="CanExecute"/> 
     </Button.CommandBindings> 
    </Button> 

View.cs:

private void CanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     ViewModel vm = (ViewModel)DataContext; 
     e.CanExecute = vm.IsValid(sender as DependencyObject); 
    } 

ViewModel.cs:

private DelegateCommand generateBinaryCommand; 

public bool IsValid(DependencyObject obj) 
     { 
      // The dependency object is valid if it has no errors and all 
      // of its children (that are dependency objects) are error-free. 
      return !Validation.GetHasError(obj) && 
      LogicalTreeHelper.GetChildren(obj) 
      .OfType<DependencyObject>() 
      .All(IsValid); 
     } 

public ICommand GenerateBinaryFileCommand 
     { 
      get 
      { 
       if (generateBinaryCommand == null) 
       { 
        // here is where I need to pass the CanExecute method 
        generateBinaryCommand = new DelegateCommand(generateBinary); 
       } 
       return generateBinaryCommand; 
      } 
     } 
+0

Посмотрите, помогут ли эти ссылки. http://stackoverflow.com/questions/28393307/disabling-global-keybindings-in-some-controls-in-wpf-c-sharp/28395791#28395791 – Vinkal

ответ

0

Хотя сама проблема остается нерешенной, мне удалось работать вокруг этого вопроса с использованием UpdateSourceExceptionFilter, описанного here - Я рекомендую использовать этот подход для проверки ,