2016-05-13 4 views
-3

У меня есть класс MainViewModel, который является основой для моей навигации.Как передать ссылку на объект через CommandParameter

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

class MainViewModel 
{ 
     public Command ShowVendorDialogCommand 
     { 
      get; 
      private set; 
     } 
     private void ShowVendorDialog(object parameter) 
     { 
      if (parameter != null) 
      { 
       VendorDialog vd = new VendorDialog(); 
       VendorDialogViewModel vm = new VendorDialogViewModel(); 
       vd.DataContext = vm; 
       vm.PropertyChanged += (s, e) => 
       { 
        if (e.PropertyName == "CloseDialog") 
        { 
         vd.Close(); 
        } 
       }; 
       vd.ShowDialog(); 

       if (vm.DialogResult) 
       { 
        parameter = vm.SelectedVendor.Copy() as Vendor; 
       } 
      } 
     } 
} 

Класс, который зависит от этого метода ниже:

class InventoryStyleSingleViewModel 
    { 
      public Vendor 
      { 
       get 
       { 
         return _Vendor; 
       } 
       set 
       { 
         if (value != null) 
         { 
          _Vendor = value; 
          OnPropertyChanged("Vendor"); 
         } 
       } 
      } 
      private Vendor _Vendor; 

      ........ 
    } 

Я по существу пытается передать свойство поставщика в качестве ссылочного типа через свойство CommandParameter к ShowVendorDialog, который выполняется через RelayCommand, я просто не знаю, как выполнить эталонную часть.

Это xaml, который привязывается к ShowVendorDialogCommand.

<Button Width="50" DockPanel.Dock="Left" Command="{Binding ElementName=BeginWindow, Path=DataContext.ShowVendorDialogCommand}" CommandParameter="{Binding Vendor}" Content="..." /> 

Это не сделать то, что мне нужно, как собственность поставщика передается по значению в функцию ShowVendorDialog.

Есть ли все, чтобы передать Продажу по ссылке?

+0

Вы пытались указать вместе с контекстом? как 'DataConext.Vendor'? –

+1

Это сработало! 'Command =" {Binding} "', и актерский состав отлично! Спасибо! –

ответ

-1

Делает ли private void ShowVendorDialog(ref object parameter) не работает?

+1

Не для того, как мое действие определено в моем классе Command. Мне пришлось бы изменить еще несколько вещей. –

Смежные вопросы