У меня есть столбец в сетке WPF Telerik, который мне нужно ограничить на основе двух вещей.
Свойство IsEditable в ViewModel и свойство IsManualChange, которое является свойством списка, к которому привязана сетка...
Я написал MultiBoolConvertor для обработки этого и реализовал в WPF следующим образом:
<telerik:GridViewComboBoxColumn
Header="Selection"
DataMemberBinding="{Binding HandHeldDifference.GRSSelection}"
ItemsSource="{Binding Path=SelectionOptions}">
<telerik:GridViewComboBoxColumn.IsReadOnly>
<MultiBinding Converter="{StaticResource MultiBoolConv}"
ConverterParameter="True">
<Binding
RelativeSource="{RelativeSource FindAncestor,
AncestorType={x:Type StackPanel}}"
Path="DataContext.IsEditable" />
<Binding Path="IsManualChange" />
</MultiBinding>
</telerik:GridViewComboBoxColumn.IsReadOnly>
</telerik:GridViewComboBoxColumn>
Однако значения, которые поступают в Convertor, являются логическими (из ViewModel) и DependencyProperty.UnsetValue из IsManualChange!
public object Convert(object[] values,
Type targetType,
object parameter,
CultureInfo culture)
{
var defaultReturn = false;
if (parameter != null)
{
bool.TryParse(parameter.ToString(), out defaultReturn);
}
if (values == null) return defaultReturn;
if (values.Length < 2) return defaultReturn;
if (values[0] is bool && values[1] is bool)
{
return ((bool) values[0]) && ((bool) values[1]);
}
return defaultReturn;
}
Второе значение явно не соответствует сравнению "values[1] is bool"
Подсказка может заключаться в том, что преобразователь вызывается только один раз, а не для каждой строки, как я ожидал.
Кто-нибудь знает, как я могу заставить это работать, пожалуйста?