我在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和转换器中的代码。