我有一个对象,其中包含例如“ 10; 20; 30”之类的字符串属性。我还有一个get属性,用于分割字符串,将每个部分转换为double并求和。因此,我有“ 10; 20; 30”和60.0(两倍)。
现在的问题是。有没有一种方法可以在TextColumn中显示60.0(双精度),但是在编辑模式下,编辑字符串“ 10; 20; 30”吗?
这样我可以绑定到一个属性进行显示,并绑定到另一个属性进行编辑?
答案 0 :(得分:4)
您可以通过使用不同的模板显示和编辑,利用现有属性本身来实现此目的。
在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
类中为用户值添加必要的验证。