微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在WPF MVVM应用程序中,MultiBindingConvertor无法在网格上工作

如何解决在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]是布尔值”比较 有一个线索可能是该转换器仅被调用一次,而不是我所期望的每行调用一次。 有谁知道我该如何工作呢?     

解决方法

        在传递DataContext之前,您将获得DependencyProperty.UnsetValue并需要处理这种情况。因此,您可以执行以下操作:
bool isManualChange= (value[1] is bool) ? (bool)value[1] : false; // or true depending on which should be the default
从上面的链接:   UnsetValue是一个前哨值,它是   用于WPF的方案   财产制度无法确定   请求的DependencyProperty值。   使用UnsetValue而不是null,   因为null可能是有效的属性   值,以及有效的(和   常用)DefaultValue。 因此,基本上,DataContext当前为null,因此它找不到名为
IsManualChange
的属性,因此您获得UnsetValue。 设置上下文后,您的转换器应再次被调用。     ,        事实证明,Telerik网格将IsReadOnly绑定到ViewModel,并且要绑定到ItemsSource中的项目时必须使用IsReadOnlyBinding!     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。