WPF databind Image.Source в MVVM - PullRequest
       21

WPF databind Image.Source в MVVM

7 голосов
/ 28 марта 2010

Я использую MVVM и пытаюсь привязать свойство Source Image к моей ViewModel таким образом, чтобы я мог изменить значок на лету. Каков наилучший шаблон для этого? У меня все еще есть возможность изменить свою ViewModel, но я не знаю, с чего начать в xaml или ViewModel.

Чтобы было ясно, я не хочу, чтобы моя ViewModel знала о конкретных изображениях (это должен знать View), а только о состоянии, которое вызывает разные изображения. На данный момент у меня есть только два состояния, скажем, красный и зеленый. Должен ли я создать свойство Enum или bool? И как мне привязать данные для переключения источника изображения?

1 Ответ

10 голосов
/ 28 марта 2010

Вы можете использовать DataTrigger и изменить изображение (полностью в XAML) в зависимости от значения свойства в ViewModel. Лично я бы использовал enum, так как вам может потребоваться несколько состояний.

VisualStateManager также будет работать для этого, но потребует WPF Futures или .NET 4.

Чтобы использовать DataTrigger, вы можете сделать что-то вроде:

<Image>
  <Image.Style>
    <Style TargetType="Image">
      <Setter Property="Source" Value="1.png" />
      <Style.Triggers>
         <DataTrigger Binding="{Binding ViewModelEnumProperty}" Value="Image2">
             <Setter Property="Source" Value="2.png" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Image.Style>
</Image>

При этом будет использоваться «1.png», но когда ваше перечисление установлено на «Image2» в виртуальной машине, оно переключится на 2.png. При необходимости можно добавить больше DataTriggers.

...