在WPF MVVM应用程序中,MultiBindingConvertor无法在网格上工作
|
我在WPF Telerik网格中有一列,我需要基于两点进行限制。
在ViewModel上的IsEditable属性和在网格上绑定到的List属性的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>
但是,进入Converter的值是bool(来自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]是布尔值”比较
有一个线索可能是该转换器仅被调用一次,而不是我所期望的每行调用一次。
有谁知道我该如何工作呢?
没有找到相关结果
已邀请:
2 个回复
佬棠
从上面的链接: UnsetValue是一个前哨值,它是 用于WPF的方案 财产制度无法确定 请求的DependencyProperty值。 使用UnsetValue而不是null, 因为null可能是有效的属性 值,以及有效的(和 常用)DefaultValue。 因此,基本上,DataContext当前为null,因此它找不到名为
的属性,因此您获得UnsetValue。 设置上下文后,您的转换器应再次被调用。
郡晒景沧