我试图根据同一行中另一列的布尔值来调整一列中的小数位数。
这是XAML
<syncf:GridCheckBoxColumn HeaderText="Headeer1"
MappingName="OnlyIntegerQuantities"
Width="120"
AllowEditing="True"/>
<syncf:GridNumericColumn HeaderText="Header2"
MappingName="Quantity"
Width="120"
AllowEditing="True"
Decimals="{Binding DataContext.OnlyIntegerQuantities,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=syncf:VirtualizingCellsControl}, Converter={StaticResource BooleanToDecimalConverter}}"
ValidationMode="Decimal"/>
如果我绑定到 ViewModel 中的任何属性,它们工作正常,但我无法绑定到填充该行的模型中的属性。
我尝试绑定到 CellsControl 的相对源,但不起作用。
我正在使用 ObservableCollection 来填充数据网格的 ItemsSource。
使用
GridTemplateColumn
代替GridNumericColumn
并使用内部的TextBlock定义模板。使用多值转换器的多重绑定设置 Text
属性。
<syncf:GridTemplateColumn HeaderText="Header2" MappingName="Quantity" Width="120" AllowEditing="True">
<syncf:GridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text">
<Setter.Value>
<MultiBinding Converter="{StaticResource BooleanToDecimalConverter}">
<Binding Path="Quantity"/>
<Binding Path="OnlyIntegerQuantities"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</syncf:GridTemplateColumn.CellTemplate>
</syncf:GridTemplateColumn>
转换器
public class BooleanToDecimalConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var quantity = (double)values[0];
var onlyQuantityInteger = (bool)values[1];
if (onlyQuantityInteger)
{
return String.Format("{0:0}", quantity);
}
else
{
return (quantity).ToString();
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}