Я хочу привязать свойства класса к элементам управления в моем пользовательском элементе управления

Я изо всех сил пытаюсь найти решение моей проблемы с привязкой.

У меня есть User Control, который имеет кнопку для вызова отдельного окна, в котором пользователь может выбрать объект. После выбора этого объекта окно закрывается, и объект в элементе управления пользователя имеет свои свойства, обновленные в соответствии с выбором. Свойства этого объекта привязаны к элементам управления в пользовательском элементе управления, но когда я обновляю свойства объекта, значения в элементах управления не обновляются (я надеюсь, что это имеет смысл).

здесь есть уменьшенный код позади:

public partial class DrawingInsertControl : UserControl
{
    private MailAttachment Attachment { get; set; }        

    public DrawingInsertControl(MailAttachment pAttachment)
    {
        Attachment = pAttachment;

        InitializeComponent();

        this.DataContext = Attachment;
    }

    private void btnViewRegister_Click(object sender, RoutedEventArgs e)
    {
        DocumentRegisterWindow win = new DocumentRegisterWindow();
        win.ShowDialog();

        if (win.SelectedDrawing != null)
        {
            Attachment.DwgNo = win.SelectedDrawing.DwgNo;
            Attachment.DwgTitle = win.SelectedDrawing.Title;
        }
    }
}

и xaml:



    

...


и, наконец, прикрепленный объект, который находится в отдельном модуле:

Public Class MailAttachment
    Public Property DwgNo As String
End Class

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

2
nl ja de

1 ответы

Класс MailAttachment должен реализовать INotifyPropertyChanged Интерфейс:

public class MailAttachment: INotifyPropertyChanged
{

    private string dwgNo;
    public string DwgNo{
        get { return dwgNo; }
        set
        {
            dwgNo=value;
           //Call NotifyPropertyChanged when the property is updated
            NotifyPropertyChanged("DwgNo");
        }
    }

 //Declare the PropertyChanged event
  public event PropertyChangedEventHandler PropertyChanged;

 //NotifyPropertyChanged will raise the PropertyChanged event passing the
 //source property that is being updated.
  public void NotifyPropertyChanged(string propertyName)
  {
     if (PropertyChanged != null)
     {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     }
  }  
}

Это заставит ваш элемент управления наблюдать событие PropertyChanged . Поэтому ваш контроль может быть уведомлен об изменениях.

Код, который я предоставил, находится на C#, но, надеюсь, вы можете перевести его на VB.Net.

2
добавлено
Epic bro, спасибо за быстрый и лаконичный ответ, отлично работал!
добавлено автор RazorUK84, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot