Я хотел бы изменить цвет моего Label
в представлении, основанном на типе в моей модели ViewModel. Для экс:Изменение свойства элемента вида на основе изменения свойства ViewModel
Мой класс в ViewModel имеет bool
свойство, как следующее:
MyViewModel
{
public bool IsBlueColor {get; set;} //Here I will raise the `PropertyChanged`
}
Как я могу обернуть триггер для этого значения, чтобы обновить Foreground
свойство моего лейбла. Все, что я мог выяснить, это изменение свойства элемента пользовательского интерфейса на основе его свойства с использованием DataTrigger
. Но не на основе viewmodel.
Как я могу достичь этого в xaml?
Прямо сейчас я делаю это:
<Label.Style>
<Style TargetType="Label" BasedOn="{StaticResource LabelStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsBlueColor, RelativeSource={RelativeSource AncestorType={x:Type local2:MyViewModel}}}" Value="True">
<Setter Property="Foreground" Value="RoyalBlue"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsBlueColor, RelativeSource={RelativeSource AncestorType={x:Type local2:MyViewModel}}}" Value="False">
<Setter Property="Foreground" Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
Причина, по которой это не работает, связано с тем, что привязки RelativeSource привязаны относительно самого элемента управления, а не контекста данных управления. Ваша привязка пытается найти родительский элемент управления типа MyViewModel, который, очевидно, не будет работать, потому что ваша модель представления не является элементом управления. Ответ Никиты верен, или если ваша модель представления задана как контекст данных вашего главного окна, вы можете использовать RelativeSource с типом окна и путем DataContext.IsBlueColor. –