C# 使用IMultiValueConverter绑定到DataGridColumn会遇到问题,而使用类似的IValueConverter则不会
我有两个Datagrid复选框列,每个列都有一个绑定C# 使用IMultiValueConverter绑定到DataGridColumn会遇到问题,而使用类似的IValueConverter则不会,c#,.net,wpf,datagrid,imultivalueconverter,C#,.net,Wpf,Datagrid,Imultivalueconverter,我有两个Datagrid复选框列,每个列都有一个绑定 <DataGrid ItemsSource="{Binding}" Name="DataGrid1" DataContext="{Binding Source={StaticResource TableViewSource}}"> <DataGridCheckBoxColumn Header="Required" Width="50" MinWidth="50"> <
<DataGrid ItemsSource="{Binding}" Name="DataGrid1" DataContext="{Binding Source={StaticResource TableViewSource}}">
<DataGridCheckBoxColumn Header="Required" Width="50" MinWidth="50">
<DataGridCheckBoxColumn.Binding>
<Binding Path="Required" Converter="{StaticResource DateTimeToBooleanConverter}"/>
</DataGridCheckBoxColumn.Binding>
</DataGridCheckBoxColumn>
<DataGridCheckBoxColumn Header="Required Test" Width="60" MinWidth="60">
<DataGridCheckBoxColumn.Binding>
<MultiBinding Converter="{StaticResource DateTimeToBooleanMultiverter}">
<Binding Path="Required_Date" />
<Binding Path="Required_Time" />
</MultiBinding>
</DataGridCheckBoxColumn.Binding>
</DataGridCheckBoxColumn>
</DataGrid>
在最后一列中,我想将日期和时间保存到两个不同的字段中“Required\u date”
和“Required\u time”(String)
。创建了以下IMultiConverter
来处理它:
public class DateTimeToBooleanMultiverter : IMultiValueConverter
{
public object Convert(object[] values, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values[0] != null) {
return true;
} else {
return false;
}
}
public object[] ConvertBack(object value, System.Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null) {
if (value == true) {
return {
System.DateTime.Now.Date,
System.DateTime.Now.TimeOfDay.ToString()
};
}
}
return {
null,
null
};
}
}
在初始荷载下,立柱看起来良好。该列已选中所有适当的单元格。但是,当值被选中/取消选中时,我会得到以下绑定错误
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='True' MultiBindingExpression:target element is 'DataGridCell' (Name=''); target property is 'CellContent' (type 'String')
此外,当我取消选中一个单元格时,它没有正确地取消选中,我通过转换器中的一些断点注意到值作为dependencProperty.Unset
(可能是由于绑定警告)
(9-30-12)
我在codeplex评论中发现了一个更有希望的线索:
“多重绑定不起作用的原因是
DataGridHelper.UpdateSource使用GetBindingExpression而不是
GetBindingExpressionBase。如果更改为多优先级
绑定应该起作用。”
我试图将更新设置为Explicit
,并创建一个调用BindingBaseExpression
进行更新的DataGrid\u EndCellEdit
事件,但我认为DataGrid列忽略了更新选项
(10-12-12)
仍然不走运,我尝试使用BindingBaseExpression
,但没有成功。显然,IMultiValueCOnverter
绑定做了一些奇怪的事情
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='True' MultiBindingExpression:target element is 'DataGridCell' (Name=''); target property is 'CellContent' (type 'String')