Добавьте это перечисление в ваш проект: -
public enum RowState
{
Blue,
Red,
Green,
White
}
Затем добавьте это свойство в вашу ViewModel: -
private RowState _RowState;
public RowState RowState
{
get { return _RowState; }
set
{
if (value != _RowState)
{
_RowState = value;
NotifyPropertyChanged("RowState"); // Assumes typical implementation of INotifyPropertyChanged
}
}
}
private void UpdateRowState()
{
if (CouldBeWhite)
RowState = RowState.White;
else if (CouldBeGreen)
RowState = RowState.Green;
else if (CouldBeRed)
RowState = RowState.Red;
else
RowState = RowState.Blue;
}
Вызовите UpdateRowState при изменении каждого свойства CouldBeXXX
.
Учтите, что вы, вероятно, не делаете передний план белым, красным или зеленым просто как прихоть.Будет какая-то причина , почему его белый, красный или зеленый.Так что в вашем коде придумайте простое короткое имя для обозначения этих причин и замените имена цветов на эти более значимые имена.
Теперь идите и получите код для StringToValueConverter
в этом блоге .Добавьте экземпляр этого к своему Xaml в UserControl.Resources
:
<local:StringToObjectConverter x:Key="RowStateToBrush">
<ResourceDictionary>
<SolidColorBrush Color="Red" x:Key="Red" />
<SolidColorBrush Color="Green" x:Key="Green" />
<SolidColorBrush Color="White" x:Key="White" />
<SolidColorBrush Color="Blue" x:Key="__default__" />
</ResourceDictionary>
</local:StringToObjectConverter>
. Вы можете привязать к TextBlock
:
<TextBlock Text="{Binding SomeTextProperty}" Foreground="{Binding RowState, Converter={StaticResource RowStateToBrush}}" />