2009-05-30 20 views
9

Konstruktor RoutedCommand ma "typ właściciela" jako ostatni argument. Jakie jest jego znaczenie? Kiedy jest używany?Jaki jest pożytek z argumentu własnego typu konstruktora klasy RoutedCommand?

dokumentacji MSDN daje zupełnie nie ma pojęcia o tym, dlaczego jest to potrzebne i czy mogę używać jednego typu dla wszystkich poleceń

Cytat z MSDN

ownerType 
    Type: System.Type The type 
    which is registering the command. 

Jest jeszcze jedna sprawa. Jakiego typu powinienem użyć podczas dynamicznego tworzenia nowych poleceń routowanych z tablicy nazw. Wygląda na to, że dowolny typ działa, więc używam UIElement, ale jeśli jest na to bardziej odpowiedni typ, chciałbym to wiedzieć.

Odpowiedz

6

Źródło polecenia RoutedCommand pokazuje, że typ staje się właściwością OwnerType. Ta właściwość jest ostatecznie sprawdzana przy użyciu następującej prywatnej metody podczas pobierania InputGestures. Wygląda na to, że ten typ jest używany do wyszukiwania (zakodowanego) zestawu poleceń w oparciu o typ, który utworzył RoutedCommand.

private InputGestureCollection GetInputGestures() 
{ 
    if (this.OwnerType == typeof(ApplicationCommands)) 
{ 
    return ApplicationCommands.LoadDefaultGestureFromResource(this._commandId); 
} 
if (this.OwnerType == typeof(NavigationCommands)) 
{ 
    return NavigationCommands.LoadDefaultGestureFromResource(this._commandId); 
} 
if (this.OwnerType == typeof(MediaCommands)) 
{ 
    return MediaCommands.LoadDefaultGestureFromResource(this._commandId); 
} 
if (this.OwnerType == typeof(ComponentCommands)) 
{ 
    return ComponentCommands.LoadDefaultGestureFromResource(this._commandId); 
} 
return new InputGestureCollection(); 
} 
+0

Ktoś może wyjaśnić, dlaczego? –

+2

Prawdopodobnie tylko "dlatego". To dobry powód do projektowania interfejsu API, jak każdy inny. * blech * –

3

Wiem, że jest to bardzo stare pytanie, ale jest to najlepsze trafienie wyszukiwania dla "routedcommand własność".

Zapisywanie OwnerType i Name w każdym obiekcie RoutedCommand daje wskazówkę, jak znaleźć odniesienia do niego w kodzie. Załóżmy, że korzystasz z debuggera w przypadku niektórych metod, które mają arbitralny parametr ICommandSource. Możesz sprawdzić właściwość Command, a jeśli zobaczysz, że OwnerType to CommonCommands, a Name to "DoSomething", możesz przejść do pola DoSomething klasy CommonCommands, gdzie może być przydatny komentarz lub wyszukać odniesienia do CommonCommands.DoSomething, aby znaleźć powiązane CommandBindings lub coś. Bez tych właściwości RoutedCommand byłby tylko anonimowym obiektem.

Nie wiem, czy powodem tego było to, co projektanci API mieli na myśli, gdy włączyli argument, ale przydało mi się to przynajmniej.

+0

Czy to nie ma żadnego efektu? To tylko dla "dokumentacji"? –

+0

@ScottStafford Ma jakiś cel. Jeśli spojrzysz na komentarz denis philips, metoda prywatna 'GetInputGestures' ładuje gesty wejściowe dla wbudowanych poleceń. Zakładam, że publicznie to ujawniają, więc przypisujesz typ, który odrzuca ich wewnętrzny kod. – NWoodsman

Powiązane problemy