WinDecorator.xaml.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using System.Windows.Data;
  10. using System.Windows.Documents;
  11. using System.Windows.Input;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Imaging;
  14. using System.Windows.Shapes;
  15. namespace Test.Decorator
  16. {
  17. /// <summary>
  18. /// WinDecorator.xaml 的交互逻辑
  19. /// </summary>
  20. public partial class WinDecorator : Window
  21. {
  22. public WinDecorator()
  23. {
  24. InitializeComponent();
  25. Items = new List<string>();
  26. this.Value = "1";
  27. for (int i = 0; i < 1000; i++)
  28. {
  29. Items.Add("adada" + i.ToString());
  30. }
  31. this.DataContext = this;
  32. this.Loaded += WinDecorator_Loaded;
  33. }
  34. private void WinDecorator_Loaded(object sender, RoutedEventArgs e)
  35. {
  36. //Spinner.CommitInput();
  37. }
  38. private void IntegerSpinner_ValueChanged(object sender, RoutedPropertyChangedEventArgs<int> e)
  39. {
  40. var old = e.OldValue;
  41. var newV = e.NewValue;
  42. }
  43. public List<string> Items { get; set; }
  44. public event PropertyChangedEventHandler PropertyChanged = (sender, e) => { };
  45. protected void RaisePropertyChanged(String propertyName = "")
  46. {
  47. if (PropertyChanged != null)
  48. {
  49. PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  50. }
  51. }
  52. private string m_Value;
  53. /// <summary>
  54. /// 值信息
  55. /// </summary>
  56. public string Value
  57. {
  58. get { return this.m_Value; }
  59. set
  60. {
  61. this.m_Value = value;
  62. RaisePropertyChanged(nameof(this.Value));
  63. if (Spinner != null)
  64. {
  65. var cc = Spinner.Value;
  66. }
  67. }
  68. }
  69. #region 测试绑定顺序
  70. /*
  71. * 可以说该控件双向绑定支持的并不好,这是一个前提,因为涉及到一些强制约束,又自定义了一些触发只改变的条件;
  72. * 有些控件,双向绑定支持的都不是太好
  73. *
  74. * 给控件的Value赋值时,SetValue();先触发后台的绑定属性,再触发静态的force回调, changed回调
  75. *
  76. * 所以直接使用这种形式去处理事件会出问题
  77. *
  78. * 推荐使用前台ValueChanged事件,或者绑定Text加提交方式KeyDown模式处理;
  79. * 第二种方式,又造成了控件初始化的时候需要手动提交一次,【后台绑定的值才能传递到界面上显示】
  80. *
  81. *
  82. */
  83. #endregion
  84. }
  85. }