來自Microsoft: 「BindingSource.ListChanged事件發生在底層列表更改或列表中的項目發生更改時」。BindingSource ListChanged事件觸發位置更改
但在我的例子中,事件觸發每個位置的變化。該表單有一個UserControl,一個BindingSource和一個按鈕。
用戶控制具有一個文本框和兩個屬性:當我結合使用的「文本」的控制
void next_Click(object sender, EventArgs e)
{
bindingsource.Position += 1;
}
:
/// <summary>
/// Is working: ListChanged is not fired
/// </summary>
public override string Text
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
/// <summary>
/// Is not working: ListChanged is fired on Position changes
/// </summary>
public string MyProperty
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
在表格上的按鈕改變的BindingSource的位置財產ListChanged事件不發生,符合市場預期:
myusercontrol1.DataBindings.Add("Text", bindingsource, "name");
但是當我使用「myProperty的」屬性ListChanged事件上的位置變化火災控件綁定:
myusercontrol1.DataBindings.Add("MyProperty", bindingsource, "name");
我嘗試了不同的DataSorces,就像這個例子:
public Example()
{
InitializeComponent();
string xml = @"<states>"
+ @"<state><name>Washington</name></state>"
+ @"<state><name>Oregon</name></state>"
+ @"<state><name>Florida</name></state>"
+ @"</states>";
byte[] xmlBytes = Encoding.UTF8.GetBytes(xml);
MemoryStream stream = new MemoryStream(xmlBytes, false);
DataSet set = new DataSet();
set.ReadXml(stream);
bindingsource.DataSource = set;
bindingsource.DataMember = "state";
bindingsource.ListChanged += BindingNavigator_ListChanged;
myusercontrol1.DataBindings.Add("MyProperty", bindingsource, "name");
}
如何使用myProperty的,避免引發ListChanged事件觸發位置變化?爲什麼Text屬性按預期工作,但MyProperty不是?
由於提前, 克里斯蒂安
謝謝伊凡你的偉大答案! – Cristian