Я использую свет MVVM с WPF. Я хочу установить цвет фона кнопки, основанный на определенном условии через ViewModel. Пожалуйста, предложите какой-то способ его получить. Благодаря
Кнопка изменения Цвет фона с помощью шаблона MVVM в WPF
Ответ 1
Использование триггеров:
<Button>
<Button.Style>
<Style TargetType="Button">
<!-- Set the default value here (if any)
if you set it directly on the button that will override the trigger -->
<Setter Property="Background" Value="LightGreen" />
<Style.Triggers>
<DataTrigger Binding="{Binding SomeConditionalProperty}"
Value="True">
<Setter Property="Background" Value="Pink" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
В MVVM вы также можете часто обрабатывать это в модели представления через свойства только для получения, например,
public bool SomeConditionalProperty
{
get { /*...*/ }
set
{
//...
OnPropertyChanged(nameof(SomeConditionalProperty));
//Because Background is dependent on this property.
OnPropertyChanged(nameof(Background));
}
}
public Brush Background =>
SomeConditinalProperty ? Brushes.Pink : Brushes.LightGreen;
Тогда вы просто привязываетесь к Background
.
Ответ 2
вы могли привязать фон к свойству на viewmodel, трюк заключается в том, чтобы использовать IValueConverter для возврата кисти с требуемым вами цветом, например, пример, который преобразует логическое значение из viewmodel в цвет
public class BoolToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
return new SolidColorBrush(Colors.Transparent);
}
return System.Convert.ToBoolean(value) ?
new SolidColorBrush(Colors.Red)
: new SolidColorBrush(Colors.Transparent);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
с обязательным выражением типа
"{Binding Reviewed, Converter={StaticResource BoolToColorConverter}}"