TemplateBinding_Values.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Avalonia.Controls;
  2. using Avalonia.Data;
  3. using BenchmarkDotNet.Attributes;
  4. namespace Avalonia.Benchmarks.Data;
  5. [MemoryDiagnoser]
  6. public class TemplateBinding_Values
  7. {
  8. private Decorator _target = new();
  9. private Control _templatedParent = new();
  10. public TemplateBinding_Values()
  11. {
  12. _target.TemplatedParent = _templatedParent;
  13. }
  14. [Benchmark]
  15. public void Produce_TemplateBinding_Value_OneWay()
  16. {
  17. var target = _target;
  18. var binding = new TemplateBinding(Control.TagProperty);
  19. // Explicit cast to IBinding is required to prevent the IObservable<object?>
  20. // overload being selected.
  21. using var d = target.Bind(Control.TagProperty, (IBinding)binding);
  22. for (var i = 0; i < 100; ++i)
  23. {
  24. _templatedParent.Tag = i;
  25. }
  26. }
  27. [Benchmark]
  28. public void Produce_TemplateBinding_Value_TwoWay()
  29. {
  30. var target = _target;
  31. var binding = new TemplateBinding(Control.TagProperty) { Mode = BindingMode.TwoWay };
  32. // Explicit cast to IBinding is required to prevent the IObservable<object?>
  33. // overload being selected.
  34. using var d = target.Bind(Control.TagProperty, (IBinding)binding);
  35. for (var i = 0; i < 100; ++i)
  36. {
  37. _templatedParent.Tag = i * 2;
  38. target.SetCurrentValue(Control.TagProperty, (i * 2) + 1);
  39. }
  40. }
  41. }