2 つのことに基づいて制限する必要がある WPF Telerik グリッドに列があります。
ViewModel の IsEditable プロパティと、グリッドがバインドされているリストのプロパティである 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 からの) bool と、IsManualChange! からの DependencyProperty.UnsetValue です。
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;
}
2 番目の値は明らかに「values[1] is bool」の比較に失敗します
手がかりは、私が期待するように、コンバーターが1行ごとではなく、1回だけ呼び出されていることです。
どうすればこれを機能させることができるか知っている人はいますか?