簡體   English   中英

綁定到從CollectionBase派生的類的屬性

[英]Binding to property of a class derived from CollectionBase

我試圖將某些控件綁定到一個對象-通常這是一個非常簡單的過程。 不幸的是,如果我要綁定的對象是從CollectionBase繼承的,則綁定到該類字段會導致錯誤:

無法綁定到數據源上的屬性或列標題。 參數名稱:dataMember

刪除collectionbase的不相容性會使此問題消失,但是我需要將此對象作為集合。 似乎CollectionBase導致更高級別的屬性變為“不可綁定”。 我可以重寫某些屬性來解決此問題嗎? 還有其他想法嗎?

我在網上找到了這個例子,可以很容易地總結出問題。 不幸的是,我還沒有在所有看到此示例的地方找到答案。

碼:

[STAThread]
static void Main()
{
    TestCollection obj = new TestCollection();
    using (Form f = new Form())
    using (BindingSource bs = new BindingSource())
    {
        bs.DataSource = typeof(Test);
        f.DataBindings.Add("Text", bs, "Caption");
        bs.DataSource = obj; // breaks

        //List<TestallData = new List<Test>();
        //allData.Add(obj);
        //bs.DataSource = allData;
        f.ShowDialog();
    }
}

class TestCollection : CollectionBase
{
    public string Caption { get { return "Working"; } }
}

CollectionBase為對象列表提供接口,例如,綁定用作數據源時,綁定會嘗試在列表內部查找單個綁定數據。 沒有列表時,您有問題。

如果要添加字幕,並且要使用CollectionBase ,則應該涉及2個類,而不僅僅是一個。

public class TestObj
{
    public string caption { get { return "yay"; } }
}

public class TestCol : CollectionBase
{
    //methods that implement CollectionBase for the TestObj type
}

使用這兩種方法,您可以綁定以下兩種方法之一。

TestObj obj = new TestObj();
TestCol col = new TestCol();
col.Add(obj);

//bind to obj, OR bind to col.  Both would work with this setup.

http://msdn.microsoft.com/zh-cn/library/system.collections.collectionbase%28v=vs.90%29.aspx

那里有一個CollectionBase的示例實現。

更新:根據評論編輯

我個人沒有任何方法可以綁定到集合的外部屬性。 作為一種解決方法,您可以使用3類系統(是的,我知道,越來越復雜)。

public class TestHeader
{
    public string Data {get;set;}
}

public class TestCol : CollectionBase
{
    //...
}

public class TestObj
{
    public TestHeader header {get;set;}
    public TestCol col {get;set;}
}

將外部字段綁定到TestObj.header ,將集合字段綁定到TestObj.col 這是一種解決方法,但是如上所述,我實際上不知道直接實現您似乎想要的方法。 我希望自己做到了,我自己的代碼中有一部分可以從中受益。

另一個例子

您也可以使用兩個類來完成此操作,但是仍然需要嵌套集合本身

public class TestObj
{
    public string data {get;set;}
    public TestCol col {get;set;}
}

在這種情況下,將單個數據字段綁定到TestObj ,將收集字段綁定到TestObj.col

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM