我正在使用转换器类根据正常工作时间显示一个名为noofweeks的属性(40),例如,如果存储在数据库中的值为40,我在datagrid列中显示1,如果它是80我是显示2,这是我的XAML和转换器代码
<sdk:DataGridTemplateColumn Width="*" CanUserReorder="False" HeaderStyle="{StaticResource DataGridBaseHeaderStyle}" Header="FTE">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Hours, Converter={StaticResource FTEConverter}}" VerticalAlignment="Stretch" Margin="4,2" HorizontalAlignment="Stretch"></TextBlock>
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Hours,Mode=TwoWay, Converter={StaticResource FTEConverter}}" VerticalAlignment="Top" Margin="4,2"
MaxLength="50" HorizontalAlignment="Stretch" >
</TextBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return false;
else
{
// Assumes a RowType has been passed as the bound value
Double Hours= (Double)value;
return Math.Round(Hours/40,0);
}
}
所以数据网格中的用户ID 1和2,数据库中没有小时数分别为80和120,看起来像
UserID NoOfWeeks StandardHours(not visible to user)
1 2 80
2 3 120
这正如预期的那样正常,现在我想根据用户修改的NoOfWeeks更新数据库中的小时数。
例如在上表中,如果具有UserID的用户将NoOfWeeks更新为4我想将小时保存为160(4 * 40)。
UserID NoOfWeeks StandardHours(用户不可见) 1 4 160 2 3 120 我在这里有点困惑,如何更新属性?
答案 0 :(得分:1)
对于那些不熟悉MVVM和转换器的人,我所做的是使用ConvertBack方法将用户输入转换为小时
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return false;
else
{
// Assumes a RowType has been passed as the bound value
string val = (string)value;
double doubleValue = double.TryParse(val, out doubleValue) ? doubleValue : 0;
return doubleValue * 40;
}
}
}
需要注意的一点是,如果用户输入文本或除数字之外的任何内容,我将值转换为0.这可能不符合您的要求,您可以在属性设置器中使用IDataErrorInfo来停止并通知用户输入值是不允许的。