Pranit Kothari Ответов: 2

Как обновить пользовательский элемент управления в той же форме


Привет,

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

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

Есть ли какой-нибудь способ, которым я могу обновить/перезагрузить пользовательский контроль?

Самый важный вопрос заключается в том, правильно ли я принял решение создать пользовательский контроль для проблемы, упомянутой выше?

2 Ответов

Рейтинг:
2

Member 14941095

Код в принятом решении содержал ошибку и нуждался в очистке. Этот код работает как есть.



public partial class UserControl1 : UserControl,INotifyPropertyChanged
   {
       public UserControl1()
       {
           InitializeComponent();
       }
       public event PropertyChangedEventHandler PropertyChanged;
       protected void OnPropertyChanged(string propName)
       {
           if ((string.IsNullOrEmpty(propName) == false) && (PropertyChanged != null))
           {
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propName));
           }
       }

       //in your every property you need to use this method
       private int _Id;

       public int Id
       {
           get { return _Id; }
           set
           {
               _Id = value;
               OnPropertyChanged("Id");
           }
       }

   }


CHill60

Вежливо объяснить, что нужно было "очистить" и почему, вместо того чтобы ожидать, что читатель сделает это. Орфографические ошибки тривиальны, и я не вижу смысла в дополнительных скобках (), но зачем менять логику с

if (string.IsNullOrEmpty(propName) && PropertyChanged != null)
к
if ((string.IsNullOrEmpty(propName) == false) && (PropertyChanged != null))
то есть зачем переходить от проверки истинности к проверке ложности - вот что я имею в виду, объясняя ваше решение. Это поможет вам избежать отрицательных голосов за публикацию очень похожего ответа на принятое решение вопроса 8 летней давности

Рейтинг:
18

Sanjay Makasana

вам нужно реализоваться

INotifyPropertyChanged
интерфейс для пользователя управление с помощью того, что в лицо вам необходимо установить onPropertyChendg() функцию, чтобы вам все свойство name

например

public partial class UserControl1 : UserControl,INotifyPropertyChanged
   {
       public UserControl1()
       {
           InitializeComponent();
       }
       public event PropertyChangedEventHandler PropertyChanged;
       protected void OnPropertyChenged(string propName)
       {
           if (string.IsNullOrEmpty(propName) && PropertyChanged != null)
           {
               PropertyChanged(this, new PropertyChangedEventArgs(propName));
           }
       }

       //in your everty properyt you need to use this method
       private int _Id;

       public int Id
       {
           get { return _Id; }
           set
           {
               _Id = value;
               OnPropertyChenged("Id");
           }
       }


   }


здесь что уведомлять контролировать когда значение будет изменено в вашем приложении что кот контролировать и обновлять свое значение


если следовать скороговорке mvvm, то это сделает вашу работу намного проще


[no name]

Эй, спасибо, Санджай. Кажется, это хорошее решение.5!