【发布时间】:2011-06-16 14:31:28
【问题描述】:
我在 WPF Telerik 网格中有一个列,我需要根据两件事进行限制。
ViewModel 上的 IsEditable 属性和 IsManualChange 属性,它是网格绑定到的 List 的属性 ...
我写了一个 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>
然而,进入转换器的值是布尔值(来自 ViewModel)和来自 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;
}
第二个值显然无法通过“values[1] is bool”比较
一个线索可能是转换器只被调用一次,而不是我期望的每行。
请问有谁知道我怎样才能让它工作?
【问题讨论】:
-
您是否尝试将 PresentationTraceSources.TraceLevel=High 添加到您的第二个绑定并检查输出窗口?
标签: wpf mvvm multibinding