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

时间:2019-02-19 20:30:01

标签: c# wpf datagrid datagridtextcolumn

我有一个对象,其中包含例如“ 10; 20; 30”之类的字符串属性。我还有一个get属性,用于分割字符串,将每个部分转换为double并求和。因此,我有“ 10; 20; 30”和60.0(两倍)。

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

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

1 个答案:

答案 0 :(得分:4)

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

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类中为用户值添加必要的验证。