У меня такая ситуация: у меня есть перечисление, и я создаю сетку данных, состоящую из строк на основе каждого значения этого перечисления.
Я передаю значения перечисления в виде строк некоторым настроенным конвертерам, и все работает нормально.
Однако я попал в ситуацию, когда мне хотелось бы с помощью преобразователя вернуть объект и связать его свойство, а не сам объект.
На самом деле я делаю это через параметр конвертера, но проблема в том, что с дизайнером эта штука не работает.
Вот несколько фрагментов кода:
XAML:
<DataGridTextColumn Header="Comments" Binding="{Binding Converter={specializedconverters:ButtonToButtonMacroConverter}, ConverterParameter=Comments, Mode=OneWay}" Width="*" />
Преобразователь:
[ValueConversion(typeof(string), typeof(object))]
internal class ButtonToButtonMacroConverter : BaseConverter, IValueConverter
{
public ButtonToButtonMacroConverter() { }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)
return "Data visible only at runtime";
ButtonMacro macro = CurrentProfile.Profile.GetMacro((Buttons)Enum.Parse(typeof(Buttons), value as string));
return macro.GetType().GetProperty(parameter as string).GetValue(macro, null);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Я хотел бы знать, есть ли лучший способ сделать это и посмотреть на это во время разработки.
Я хотел бы вернуть через конвертер сам объект (ButtonMacro) и получить доступ к его свойству в привязке, что-то вроде Path = Comments (который является свойством ButtonMacro)
Пример:
<DataGridTextColumn Header="Comments" Binding="{Binding Converter={specializedconverters:ButtonToButtonMacroConverter}, Path=Comments, Mode=OneWay}" Width="*" />
Возможно ли что-то подобное?
Обновление 1:
<TextBlock Text="{Binding Source={Binding Converter={specializedconverters:ButtonToButtonMacroConverter}, Mode=OneWay}, Converter={converters:ObjectToStringConverter}}" />
Можно ли сделать что-то подобное?