Я получил этот код XAML:с объектом # Кастинг для ENUM не будут работать
<Grid Background="{Binding Source=Typ, Converter={StaticResource ColorConv}}">
Typ является Enum, этот:
public enum LogEintragTyp { Debug, Fehler, Debug2, Warnung, Analyse, User }
У меня есть конвертер, который преобразует этот тип в цвет. Heres часть его:
[ValueConversion(typeof(LogEintragTyp), typeof(Color))]
public class LogTypToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value.GetType() == typeof(LogEintragTyp)))
throw new Exception("Wrong type!");
LogEintragTyp sv = (LogEintragTyp)value;
объектов, которые связаны с этим шаблоном ВСЕГДА значение «LogEintragTyp». Однако он всегда исключает исключение.
Когда я отладки это в Visual Studio он говорит: "значение" заключается в следующем:
Так он говорит: "значение" содержит "Typ". Но когда я смотрю на из отладчика при наведении курсора мыши правильно литым значение он говорит, что это (в нижней части):
«Debug», который является значением, которое я искал ... Но когда Я перемещаю отладчик в эту строку, чтобы на самом деле позволить программе выполнить преобразование, это говорит о недопустимом исключении литья. Почему в объекте «значение» нет «LogEintragTyp», но строка «Typ», которая является именем значения, которое я действительно ищу, и отладчик также видит, но исполняющая программа isnt?
вы не можете боксировать отливать строку в перечисление вам нужно использовать Enum.TryParse –
Похоже, что 'value' является' string'. И 'sv' просто показывает вам значение по умолчанию, прежде чем оно будет установлено приложением в отладчике. – juharr
Когда вы пишете '{Binding Source = Typ, ...}' исходный объект привязки - это просто строка '' Typ "'. Вероятно, вы хотите связать какой-то объект с общедоступным свойством «Typ» и написать Binding следующим образом: '{Binding Path = Typ, ...}' или просто '{Binding Typ, ...}'. – Clemens