如何針對MonthCalendar.SelectionRange屬性執行數據綁定?鑑於屬性類型是'SelectionRange',這是一個類,我不知道該怎麼去做。任何例子將不勝感激。MonthCalendar.SelectionRange數據綁定示例
2
A
回答
2
嗯,似乎並沒有對這個任何明顯的事件,無論是在MonthCalendar
或SelectionRange
,也不工具INotifyPropertyChanged
,所以它看起來像數據綁定可能無法在這裏。
更新:但是,它確實會引發DateChanged,因此您可以手動將某些內容鉤到一起,或者(更有用地)通過繼承控件以適合綁定的方式公開值和事件。注意Actual(...)
是有用的,因爲最終(否則)是午夜前,而不是半夜本身...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows.Forms;
class Foo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
Debug.WriteLine(ToString());
}
private void SetField<T>(ref T field, T value, string propertyName)
{
if (!EqualityComparer<T>.Default.Equals(field, value))
{
field = value;
OnPropertyChanged(propertyName);
}
}
private DateTime start, end;
public DateTime Start { get { return start; } set { SetField(ref start, value, "Start"); } }
public DateTime End { get { return end; } set { SetField(ref end, value, "End"); } }
}
class BindableCalendar : MonthCalendar
{
public DateTime ActualSelectionStart
{
get { return SelectionRange.Start; }
set { if (ActualSelectionStart != value) { SetSelectionRange(value, ActualSelectionEnd); } }
}
public DateTime ActualSelectionEnd
{
get { return SelectionRange.End; }
set { if (ActualSelectionEnd != value) { SetSelectionRange(ActualSelectionStart, value); } }
}
// should really use EventHandlerList here...
public event EventHandler ActualSelectionStartChanged, ActualSelectionEndChanged;
DateTime lastKnownStart, lastKnownEnd;
protected override void OnDateChanged(DateRangeEventArgs drevent)
{
base.OnDateChanged(drevent);
if (lastKnownStart != drevent.Start)
{
if (ActualSelectionStartChanged != null) ActualSelectionStartChanged(this, EventArgs.Empty);
lastKnownStart = drevent.Start;
}
if (lastKnownEnd != drevent.End)
{
if (ActualSelectionEndChanged != null) ActualSelectionEndChanged(this, EventArgs.Empty);
lastKnownEnd = drevent.End;
}
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
MonthCalendar cal;
Button btn;
using (Form form = new Form
{
Controls = {
(cal = new BindableCalendar { Dock = DockStyle.Fill, MaxSelectionCount = 10 }),
(btn = new Button { Dock = DockStyle.Bottom, Text = "thwack"})
}
})
{
Foo foo = new Foo { Start = DateTime.Today, End = DateTime.Today.AddDays(1) };
cal.DataBindings.Add("ActualSelectionStart", foo, "Start").DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
cal.DataBindings.Add("ActualSelectionEnd", foo, "End").DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
btn.Click += delegate
{
foo.Start = foo.Start.AddDays(1);
foo.End = foo.End.AddDays(1);
};
Application.Run(form);
}
}
}
0
對我來說,這似乎是很簡單的。我只綁定MonthCalendar組件的SelectionStart和SelectionEnd屬性。
this.Calendar1.DataBindings.Add(new System.Windows.Forms.Binding("SelectionStart",
bindingSource, "DateField", true));
this.Calendar1.DataBindings.Add(new System.Windows.Forms.Binding("SelectionEnd",
bindingSource, "DateField", true));
相關問題
- 1. 示例Android數據綁定錯誤
- 2. WPF數據綁定 - 「自定義類型描述符」示例
- 3. DataGridView示例綁定問題
- 4. ASP.NET綁定單實例數據
- 5. 數據綁定控件屬性(例如顏色)不被顯示
- 6. knockout.js中的數據綁定購物車編輯器示例
- 7. 使用FormView更新數據綁定的示例?
- 8. 數據綁定問題WP7中的快速入門示例
- 9. 爲什麼本驗證示例中的數據綁定工作?
- 10. 如何綁定到過濾或分組的Sketchflow示例數據?
- 11. 簡單聚合物(0.5.4)數據綁定示例問題
- 12. 數據綁定 - 數據綁定控件
- 13. 綁定數據
- 14. 數據綁定RadioButtonList綁定,但現在顯示在GridView中
- 15. ListBox中不顯示綁定數據
- 16. 將數據綁定到工具提示
- 17. LoginView不顯示數據綁定控件
- 18. DataGridView的數據綁定上不顯示數據,以數據表
- 19. 襪子4綁定在php示例中
- 20. KendoUI網格服務器綁定示例
- 21. SQL數據示例
- 22. PCD示例數據
- 23. 數據綁定 - C#
- 24. VB.net數據綁定
- 25. XML數據綁定
- 26. Silverlight數據綁定
- 27. WPF數據綁定
- 28. Android數據綁定
- 29. .NET數據綁定
- 30. Flex數據綁定