WPF——数据转换器

作者:追风剑情 发布于:2021-9-1 16:43 分类:C#

源数据与目标数据之间做转换。

示例:DataGridTextColumn与自定义类对象绑定

定义类对象

  1. public class ActivityAdditional
  2. {
  3. public string data;
  4.  
  5. public new string ToString()
  6. {
  7. return data;
  8. }
  9. }


定义数据转换器

  1. //活动附加项转换器
  2. public class ActivityAdditionalConverter : IValueConverter
  3. {
  4. //缓成上一次正确的对象
  5. private object cacheValue;
  6.  
  7. //此方法返回的值将绑定到UI上
  8. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  9. {
  10. if (value == null)
  11. value = new ActivityAdditional();
  12. cacheValue = value;
  13. string json = JsonConvert.SerializeObject(value);
  14. return json;
  15. }
  16.  
  17. //UI编辑后回传时调用此方法
  18. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  19. {
  20. object modifiedValue;
  21. try
  22. {
  23. var settings = new JsonSerializerSettings();
  24. //Json中出现了C#对象中没有的成员时,抛出错误。
  25. settings.MissingMemberHandling = MissingMemberHandling.Error;
  26. modifiedValue = JsonConvert.DeserializeObject<ActivityAdditional>(value as string, settings);
  27. cacheValue = modifiedValue;
  28. }
  29. catch
  30. {
  31. //如果反序列化失败,则用上一次正确的值代替
  32. modifiedValue = cacheValue;
  33. }
  34. return modifiedValue;
  35. }
  36. }


在App.xaml中定义ResourceDictionary

<Application xmlns:data="clr-namespace:DataEditor.DataObject" >
<Application.Resources>
   <ResourceDictionary>
      <data:ActivityAdditionalConverter x:Key="activityAdditionalConverter"/>
   </ResourceDictionary>
</Application.Resources>

绑定
<DataGridTextColumn Binding="{Binding Additional, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource activityAdditionalConverter}}" MinWidth="100" Width="*" Header="附加项" />

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号