Я создал простой файл UserControl
, в котором есть TextBox
, и я также создал класс Person, который имеет два свойства: «FirstName» и «LastName».Связать разные свойства класса с двумя экземплярами одного и того же UserControl
Я хочу повторного использования то же UserControl
, но связать различные свойства из класса Person к каждому экземпляру этого UserControls
TextProperty.
Итак, я создал два экземпляра этого же TextBox UserControl
в Form1
, разместив их как в двух отдельных элементах ElementHost
.
Теперь я пытаюсь связать первый TextBox UserControls
TextProperty с классом «FirstName» класса Person, а другой TextBox UserControl
TextProperty для свойства «LastName» класса Person. Который я не знаю, как это сделать.
Конечным результатом должно быть два экземпляра моего TextBox UserControl
, один из которых отображает первое имя класса Person, а другой экземпляр, отображающий фамилию классов Person. По мере изменения свойств класса Person FirstName или LastName изменения должны отражаться на каждом UserControl
посредством привязки.
Я знаю, что может добавить два из TextBoxs
в один UserControl
с StackPanel
или что-то подобное и установить стягивание в XAML, но это не то, что я хочу. Есть ли способ связать UserControls
с другими классами из-за пределов их xaml или обратного кода?
UserControl код - TextBoxUC.xaml
код<UserControl x:Class="TextBoxUC"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ClassPropertiesToTextBox"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="300">
<Grid>
<TextBox x:Name="tbx" />
</Grid>
</UserControl>
Person.vb Класс Код
Public Class Person
Implements INotifyPropertyChanged
Private _firstname As String
Public Property FirstName() As String
Get
Return _firstname
End Get
Set(ByVal value As String)
_firstname = value
NotifyPropertyChanged("FirstName")
End Set
End Property
Private _lastname As String
Public Property LastName() As String
Get
Return _lastname
End Get
Set(ByVal value As String)
_lastname = value
NotifyPropertyChanged("LastName")
End Set
End Property
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
End Class
Form1.vb Класс
Public Class Form1
'first TextBox UserControl to display Persons FirstName'
Dim WithEvents tbxFirstNameUC As TextBoxUC
'second TextBox UserControl to display Persons LastName'
Dim WithEvents tbxLastNameUC As TextBoxUC
'Person class to be used'
Dim p As Person
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
p = New Person
p.FirstName = "Homer"
p.LastName = "Simpson"
tbxFirstNameUC = New TextBoxUC
'Set DataContext to my Person class instance'
tbxFirstNameUC.DataContext = p
'Set binding of Person classes FirstName to my first instance TextBox UserControls Text Property'
'Cant get TextBoxes TextProperty'
tbxFirstNameUC.tbx.SetBinding(tbxFirstNameUC.tbx.Text, New Binding("FirstName", p, p.FirstName))
'host FirstName TextBox UserControl as a child of ElementHost control'
hostTbxFN.Child = tbxFirstNameUC
tbxLastNameUC = New TextBoxUC
'Set DataContext to my Person class instance'
tbxLastNameUC.DataContext = p
'Set binding of Person classes FirstName to my first instance TextBox UserControls Text Property'
'Cant get TextBoxes TextProperty'
tbxLastNameUC.tbx.SetBinding(tbxLastNameUC.tbx.Text, New Binding("LastName", p, p.LastName))
'host LastName TextBox UserControl as a child of ElementHost control'
hostTbxLN.Child = tbxLastNameUC
End Sub
End Class
Вы связывание классов Person «ПгвЬЫате» в 'TextBox UserControl' в окне приложения WPF, но мне нужно, чтобы создать этот как в моем примере, или я не прочь передать класс Person в 'Form1.vb' в качестве ссылки на «TextBoxUC» 'UserControl' в' Form1', может быть, через конструктор или метод и создание привязки в коде, стоящем за этим 'UserControl', но я не знаю, какой код установить это , Я использую приложение Windows Form, а не приложение WPF, но я интегрирую 'UserControls' через элементы управления ElementHost'. – C9C
Я также пробовал свойства зависимостей, но я не знаю, как подключить его через код, только через xaml. Спасибо в любом случае – C9C
Я обновил свой ответ на примере того, как программно связывать свойство зависимостей. Надеюсь, это поможет. – mm8