2

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

现在的问题是。有没有办法在 TextColumn 中显示 60.0(作为双精度),但是在进入编辑模式时编辑字符串“10; 20; 30”?

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

4

1 回答 1

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

于 2019-02-19T21:03:04.873 回答