WPF/DataGrid: 绑定到不同的属性来显示和编辑

WPF/DataGrid: Binding to different properties for displaying and editing

我有一个包含例如字符串 属性 的对象,例如“10;20;30”。我还有一个 get 属性 拆分字符串,将每个部分转换为双精度并将它们相加。因此我有“10;20;30”和 60.0(双倍)。

现在问题来了。有没有一种方法可以在 TextColumn 中显示 60.0(双精度),但是当进入编辑模式时编辑字符串“10;20;30”?

以便我可以绑定到一个 属性 进行显示并绑定到另一个 属性 进行编辑?

您可以使用现有的 属性 本身通过使用不同的模板显示和编辑来实现此目的。

以下CellTemplateCellEditingTemplate可用于此。

<Grid>
    <Grid.Resources>
        <local:ValueConverter x:Key="ValueConverter"/>
        <DataTemplate x:Key="DisplayTemplate" >
            <TextBlock Text="{Binding StringProperty, 
                                      Converter={StaticResource ValueConverter}}"/>
        </DataTemplate>
        <DataTemplate x:Key="EditTemplate">
            <TextBox Text="{Binding StringProperty}"  />
        </DataTemplate>
    </Grid.Resources>
    <DataGrid Name="DG1" ItemsSource="{Binding Items}" AutoGenerateColumns="False" 
              CanUserAddRows="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Total" 
                                    CellTemplate="{StaticResource DisplayTemplate}" 
                                    CellEditingTemplate="{StaticResource EditTemplate}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

您可以使用 IValueConverter 将更新后的字符串值转换为 double 根据您需要的计算。

public class ValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            double total = 0.0d;
            foreach (var item in value.ToString().Split(';'))
                total += System.Convert.ToDouble(item.Trim());
            return total;
        }
        catch
        {
            return 0.0d;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

注意: 您可以在 ValueConverter class.

中为用户值添加必要的验证