Я пытаюсь обойти тот факт, что не могу указать динамическое значение для ConverterParameter
. См. Другой мой вопрос, почему мне нужно привязать динамическое значение к ConverterParameter
- мне не нравятся опубликованные в настоящее время решения, поскольку все они требуют, как мне кажется, ненужных изменений в моей модели представления.
Чтобы попытаться решить эту проблему, я создал собственный конвертер и открыл для него свойство зависимости:
public class InstanceToBooleanConverter : DependencyObject, IValueConverter
{
public object Value
{
get { return (object)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(InstanceToBooleanConverter), null);
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null && value.Equals(Value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? Value : Binding.DoNothing;
}
}
Есть ли способ установить это значение с помощью привязки (или стилясеттер или другой сумасшедший метод) в моем XAML?
<ItemsControl ItemsSource="{Binding Properties}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:SomeClass}">
<DataTemplate.Resources>
<!-- I'd like to set Value to the item from ItemsSource -->
<local:InstanceToBooleanConverter x:Key="converter" Value="{Binding Path=???}" />
</DataTemplate.Resources>
<!- ... ->
Примеры, которые я видел до сих пор, связаны только со статическими ресурсами.
Редактировать:
Я получил некоторые отзывы о том, что есть только один экземпляр конвертера с XAML, который я опубликовал.
Я могу обойти это, поместив ресурс в свой элемент управления:
<ItemsControl ItemsSource="{Binding Properties}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:SomeClass}">
<RadioButton Content="{Binding Name}" GroupName="Properties">
<RadioButton.Resources>
<!-- I'd like to set Value to the item from ItemsSource -->
<local:InstanceToBooleanConverter x:Key="converter"
Value="{Binding Path=???}" />
</RadioButton.Resources>
<RadioButton.IsChecked>
<Binding Path="DataContext.SelectedItem"
RelativeSource="{RelativeSource AncestorType={x:Type Window}}"
Converter="{StaticResource converter}" />
</RadioButton.IsChecked>
</RadioButton>
<!- ... ->
Итакэта проблема не блокируется необходимостью совместно использовать экземпляр конвертера:)