имеют простой XAMLНе похоже, чтобы получить мой IValueConverter работать
<UserControl.Resources>
<converters:StateToColorConverter x:Key="stateToColorConverter"/>
</UserControl.Resources>
<StackPanel>
<Grid Width="150" Height="100" Background="{Binding State, Converter={StaticResource stateToColorConverter}}"></Grid>
<Button
Width="100"
Height="70"
Command="{Binding InitializeCommand}">Initialize</Button>
</StackPanel>
Его вид модель имеет свойство государства, которое имеет правильное значение.
public class MachineControlViewModel :ViewModelBase
{
private readonly IMachine machine;
public RelayCommand InitializeCommand { get; set; }
private MachineStates state;
public MachineStates State
{
get { return state; }
set { Set(() => State, ref state, value); }
}
public MachineControlViewModel(IMachine machine)
{
this.machine = machine;
InitializeCommand = new RelayCommand(Initialize, CanInitialize);
State = machine.State;
machine.StateChanged += MachineOnStateChanged;
}
// left out irrelevant parts
}
Затем реализация IValueConverter
public class StateToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var state = (MachineStates) Enum.Parse(typeof (MachineStates), value.ToString());
switch (state)
{
case MachineStates.Idle:
return Color.Red;
case MachineStates.Initialized:
return Color.Green;
case MachineStates.Production:
return Color.Blue;
case MachineStates.Error:
return Color.Red;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Когда я запускаю мое приложение, то BackColor грид не покажет.
Когда я устанавливаю Hardcoded BackColor (так без преобразователя значений), он визуализируется правильно.
Когда я использую свой конвертер значений и помещаю точку останова в метод преобразования, я вижу, что код выполняется просто отлично, и возвращается цвет. Но ничего не показано ...
Что я делаю неправильно?
FYI, вы можете изучить привязки во время выполнения с помощью Snoop. Позвольте вам понять, что конвертер возвращал неправильный тип. – Will