Подскажите как реализовать в WPF приложении условия. Например, я хочу, чтобы в зависимости от текста одного TextBlock'a изменялся цвет текста другого текстблока, при этом соблюдая MVVM. Мой вопрос относится не только к данном примеру, а к тому, как в целом менять что-то, при выполнении определенного условия. Подскажите как эти условия задать и как их применить к определенному элементу.
Создаем ViewModel с текстовым полем
public class MainViewModel : INotifyPropertyChanged
{
private string _viewModelText;
public string ViewModelText
{
get => _viewModelText;
set
{
if (value == _viewModelText) return;
_viewModelText = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Пишем конвертер из строки в цвет
public class StringToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var str = value as string;
if (string.IsNullOrEmpty(str)) return new SolidColorBrush(Colors.White);
var colors = typeof(Colors).GetProperties().ToDictionary(pi => pi.Name, co => (Color)co.GetValue(null));
if (colors.ContainsKey(str)) return new SolidColorBrush(colors[str]);
return new SolidColorBrush(Colors.White);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Создаем окно с текстовым полем и биндим на модель
<Window x:Class="RU_986676.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RU_986676"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<local:StringToBrushConverter x:Key="StringToBrushConverter"></local:StringToBrushConverter>
</Window.Resources>
<Grid Background="{Binding ViewModelText, Converter={StaticResource StringToBrushConverter}}">
<TextBox Text="{Binding ViewModelText, UpdateSourceTrigger=PropertyChanged}" Width="300" Height="40"></TextBox>
</Grid>
</Window>
Запускаем всю эту радость
Все исходники ищите тут
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо получать данные о количестве мониторов, а так-же о рабочей области каждого из них, иметь возможность получить вычислить монитор,...
У меня есть класы entities для представление данных в БД и соответствующие DTO для передачи данных между слоями приложения