如何使用由 MappingName 填充的 SFDataGrid 将一列绑定到另一列

问题描述 投票:0回答:1

我试图根据同一行中另一列的布尔值来调整一列中的小数位数。

这是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。

wpf mvvm data-binding syncfusion
1个回答
0
投票

使用

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.