为什么这个WPF多重绑定返回null?

时间:2014-08-22 08:29:29

标签: c# wpf xaml

我在XAML中遇到了这种令人困惑的情况:

<CheckBox Content="{Binding}" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ExcludeMemberCountCommand}">
    <CheckBox.IsChecked>
        <MultiBinding Converter="{StaticResource OrderExclusionConverter}" Mode="OneWay">
            <Binding Path="DataContext" RelativeSource="{RelativeSource AncestorType=ListView}"/>
            <Binding Path="." />
        </MultiBinding>
    </CheckBox.IsChecked>
    <CheckBox.CommandParameter>
        <MultiBinding Converter="{StaticResource OrderExclusionParamConverter}">
            <Binding Path="DataContext" RelativeSource="{RelativeSource AncestorType=ListView}"/>
            <Binding Path="." />
        </MultiBinding>
    </CheckBox.CommandParameter>
</CheckBox>

这个想法是需要两个参数来确定盒子是否以&#34;检查&#34;或者,如果用户选中该框(触发命令),则需要使用相同的两个参数将数据保存到数据库中。

这是一个集合绑定的ListView控件,在一个包含到另一个集合的网格数据绑定的列中。因此,使用ViewModel属性保存此状态并不简单。我确实尝试在ListView上使用SelectedItem,但遇到了各种各样的问题,所以重新使用Multibinding。

IsChecked绑定和转换器工作正常,并正确预选复选框以进行检查。但是,我注意到在绑定时,OrderExclusionConverter也会绑定。它包含预期的值。这是转换器。

public class OrderExclusionParameterConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return values;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

到目前为止,这么好。但是,当我检查一个空的复选框时,触发命令并在命令代码中点击一个断点,传递的对象有两个空值代替绑定值。为什么呢?

另外 - 有更好的方法吗?我讨厌我在这里所做的是有效地复制XAML和转换器中的代码。

0 个答案:

没有答案