using System;
using System.Globalization;
using System.Linq;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
{
public class BackGroundColorConverters : IMultiValueConverter
{
public object Convert(object values, Type targetType, object parameter, CultureInfo culture)
{
SolidColorBrush color = new SolidColorBrush(Colors.Transparent);
if (values == null)
{
return color;
}
bool A= (bool)(values[0]);
bool B= (bool)values[1];
if (A&& B)
{
color = new SolidColorBrush(Colors.Red);
}
else if (A== true && B== false)
{
color = new SolidColorBrush(Colors.Gray);
}
else if (A== true && B== true)
{
color = new SolidColorBrush(Colors.Green);
}
else
{
color = new SolidColorBrush(Colors.LightBlue);
}
return color;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
private bool _checkAStatus;
public bool CheckAStatus
{
get => _checkAStatus;
set => SetProperty(ref _checkAStatus, value);
}
private bool _checkDStatus;
public bool CheckDStatus
{
get => _checkDStatus;
set => SetProperty(ref _checkDStatus, value);
}
public ViewModel()
{
this.CheckAstatus = false;
this.CheckDstats = true;
}
두 값의 상태 변화에따라 색 변화를 주고싶은데
System.InvalidCastException: ‘Unable to cast object of type ‘MS.Internal.NamedObject’ to type ‘System.Boolean’.’
라는 오류를 던집니다. 값 자체는 바인딩이 됐는데 형 변환이 안되는거 같은데 이유를 못찾겠습니다
multiconverter말고 그냥 converter하면 잘 되는데 이해가 안됩니다;
혹시 @BOBx5 님께서 말씀하신것과 같이
바인딩을 건 곳이 DataGrid나 ItemsControl의 item이라면
RelativeSource의 Mode를 FindAncestor, AncestorType을 item의 상위 컨트롤(DataGrid나 ItemsControl)에 두고 써보세욥ㅎㅎ