我會想辦法讓在視圖模型bool
財產,這是當Amount
改變計算:
public bool IsAmountZero
{
get { return Amount == 0; }
}
private int _amount;
public int Amount
{
get { return _amount; }
set
{
_amount = value;
OnPropertyChanged();
OnPropertyChanged(nameof(IsAmountZero));
}
}
,然後寫轉換器BoolToColorConverter
(色彩有可能是通過某種方式ConverterParameter
)。
// in current form it's actually BoolToColorRedGreenConverter
public class BoolToColorConverter : MarkupExtension, IValueConverter
{
public BoolToColorConverter() { }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
{
var colorFalse = Colors.Green;
var colorTrue = Colors.Red;
if (parameter != null)
{
//...
}
return (bool)value ? colorTrue : colorFalse;
}
throw new InvalidCastException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
使用這樣
<Button.Background>
<SolidColorBrush Color="{Binding IsAmountZero, Converter={local:BoolToColorConverter}}" />
</Button.Background>
這將是相當重用的解決方案。
否則只是使轉換器IntZeroCheckToColorGreenRedConverter
,但它不會很可重複使用與bool
屬性相比。
想法與Brush
屬性在視圖模型是壞的,因爲viewmodel不關心顏色。 Viewmodel應該只包含與模型相關的邏輯,然後由視圖使用。如果您只想更改顏色(例如,使用Blue
而不是Green
),則必須在視圖中完成此更改。因此bool
屬性和BoolToColorConverter
(或BoolToSolidBrushConverter
直接使用xaml中的Background
屬性)轉換器。
如果紅色的條件爲假,它是否會設置爲綠色? – BendEg
我剛測試過它,似乎工作。我有更改顏色的按鈕,我使用兩個按鈕將視圖模型中的Amount屬性設置爲0或5(只是其他值爲0),我可以看到該按鈕相應地更改其背景顏色。 – Martin