Как создать составной пользовательский элемент управления VB.NET

#vb.net #winforms #data-binding

#vb.net #winforms #привязка данных

Вопрос:

 <Serializable()>    
Public Class PersonNameOnly
   
    Private p_Name As String = ""
    Public Sub New()
        ' needed for deserialization
    End Sub

    Public Property Name As String
        Get
            Return p_Name
        End Get
        Set(value As String)
            p_Name = value
        End Set
    End Property
End Class 
  

[WinForm]

Приведенный PersonNameOnly выше класс является привязанным типом BindingSource к PersonUsercontrolForPersonWithNameOnly пользовательскому элементу управления, имя привязано к a Textbox .

MainUsercontrolForPersonWithNameOnly имеет коллекцию PersonUsercontrolForPersonWithNameOnly

Все вышеперечисленное отлично работает в существующем приложении.

Мне нужно создать новую форму MainUsercontrolForPersonWITHIMAGE , поэтому я создал новую UserControl , которая наследует PersonUsercontrolForPersonWithNameOnly , и добавил a Label , который содержит ImageUrl, так что это то, что я сделал до сих пор ниже.

 <Serializable()>
Public Class PersonWITHIMAGE
    Inherits PersonNameOnly
    Private p_ImageUrl As String = ""
    Public Sub New()
        ' needed for deserialization
    End Sub

    Public Property ImageUrl As String
        Get
            Return p_ImageUrl
        End Get
        Set(value As String)
            p_ImageUrl = value
        End Set
    End Property
End Class 
  

[WinForm]

 <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class PersonUsercontrolForPersonWITHIMAGE 
    Inherits PersonUsercontrolForPersonWithNameOnly 
  

Как я могу объединить две привязки данных, как если бы это был один источник, мне удается получить имя только для работы с формой верхнего уровня с коллекцией, но я не уверен, как синхронизировать данные с именем только пользовательского элемента управления.

Как я могу объединить две привязки данных в одну составную форму?

Ответ №1:

Похоже, вы хотите привязаться к двум разным типам, один из которых является базовым типом другого. Я не думаю, что вы можете это сделать.

Но смотрели ли вы на использование интерфейса, например IPersonUsercontrolForPerson , и на основе каждого класса на нем? Это должно открыть возможность абстрагирования вашей привязки элемента управления.

Отказ от ответственности!Этот ответ должен служить отправной точкой, поскольку я на самом деле не закодировал для вас тест / ответ. Но вот где я бы начал искать.

Комментарии:

1. Спасибо, у вас есть какие-либо ссылки на примеры или образцы, пожалуйста?

2. Я упустил ключевую деталь, что классы были <Serializable()> для XML, поэтому у меня были некоторые проблемы с интерфейсами, поэтому я искал альтернативное решение