Этого можно достичь с помощью существующего свойства, используя различные шаблоны отображения и редактирования.
Ниже CellTemplate
и CellEditingTemplate
можно использовать для этого.
<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
класс.