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”?
以便我可以绑定到一个 属性 进行显示并绑定到另一个 属性 进行编辑?
您可以使用现有的 属性 本身通过使用不同的模板显示和编辑来实现此目的。
以下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
class.
中为用户值添加必要的验证
我有一个包含例如字符串 属性 的对象,例如“10;20;30”。我还有一个 get 属性 拆分字符串,将每个部分转换为双精度并将它们相加。因此我有“10;20;30”和 60.0(双倍)。
现在问题来了。有没有一种方法可以在 TextColumn 中显示 60.0(双精度),但是当进入编辑模式时编辑字符串“10;20;30”?
以便我可以绑定到一个 属性 进行显示并绑定到另一个 属性 进行编辑?
您可以使用现有的 属性 本身通过使用不同的模板显示和编辑来实现此目的。
以下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
class.