Триггеры интерактивности и общие свойства? - PullRequest
0 голосов
/ 26 августа 2011

Я создал TriggerBase класс, имя CollectionContainsValueTrigger.Как следует из его названия, триггер вызывает действие, когда оно содержит определенное значение.

Однако я хотел бы создать триггер, чтобы он действовал таким образом, чтобы он принимал все виды ObservableCollection из T, а не просто явный тип ObservableCollection.Я попытался ObservableCollection объекта, но привязка не работает, потому что тип отличается от моего ViewModel, явно набранного ObservableCollection.

Как я могу это сделать?

Пример xaml:

  <i:Interaction.Triggers>
    <mi:CollectionContainsValueTrigger Collection="{Binding SomeStronglyTypedViewModelCollection}" Value="Some Value">
      <SomeAction />
    </mi:CollectionContainsValueTrigger>
  </i:Interaction.Triggers>

Ответы [ 2 ]

0 голосов
/ 27 августа 2011

хорошо, я понял, что xaml в настоящее время не поддерживает Generics, только в будущей версии. если это произойдет, это решило бы мою проблему ....

0 голосов
/ 26 августа 2011

Трудно предложить, не увидев несколько примеров того, что вы пытаетесь достичь.

Если я правильно понимаю, ваш неуниверсальный класс нуждается в полиморфном доступе к некоторым родовым классам (например, ObservableCollection) различных типов

Для этого я бы использовал полиморфный адаптер:

class ObservableCollectionAdapterBase 
{
  virtual void Method1(){}
  virtual void Method2(){}
}

class ObservableCollectionAdapter<T, TCollectionType> : ObservableCollectionAdapterBase 
where TCollectionType : IObservableCollection<T> 
{
   public ObservableCollectionAdapter(TCollectionType collection)
   {
      _collection = collection;
   }

   override void Method1(){ _collection.DoSomething(); }
   override void Method2(){ _collection.DoSomething(); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...