Внесите следующие изменения в свой код.
Сделайте GetPublications () для возврата типа "NewsData", как показано ниже,
public NewsData GetPublications()
{
string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
NewsData newsData = new NewsData();
using (var Connect = new SqlConnection(connstr))
{
Connect.Open();
using (var Command = new SqlCommand("[dbo].[spNewsManagementTb_DisplayNews]", Connect))
{
Command.CommandType = CommandType.StoredProcedure;
Command.Parameters.Add("@entity_id", SqlDbType.VarChar).Value = LoggedInData.LoggedInstitutionId;
SqlDataReader dr = Command.ExecuteReader();
while (dr.Read())
{
string newsTitle = dr.GetString(0);
string newsMessage = dr.GetString(1);
string newsAuthor = dr.GetString(2);
DateTime newsDate = dr.GetDateTime(3);
string newsDateFormated = newsDate.ToString("dddd, dd MMMM yyyy");
newsData.InfoTitle = newsTitle;
newsData.InfoDate = newsDateFormated;
newsData.InfoAuthor = newsAuthor;
}
dr.Close();
Connect.Close();
}
}
return newsData;
}
В выделенном фрагменте кода (конструкторе) вашего пользовательского элемента управления выполните следующие изменения:
public HomeUserControl()
{
InitializeComponent();
try
{
var newsData = GetPublications();
this.DataContext = newsData;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Реализуйте INotifyPropertyChanged для класса NewsData. Ниже приведена ссылка о том, как этого добиться
https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-property-change-notification
Небольшое предложение: - Я предпочитаю делать вызов из базы данных в asyn c так, чтобы мой пользовательский элемент управления загружал и ожидал поступления и привязки данных.
Попробуйте и сообщите нам, если у вас все еще есть какие-либо проблемы.
Редактировать : - - Добавлен дополнительный фрагмент кода после обновленного вопроса.
Привет, я видел некоторые ошибки из вашего кода.
- В вашем .xaml вы используете "InfoDate "и" InfoAuthor "для привязки к вашему лейблу. Но ваши NewsData не имеют этих свойств.
Имена ваших свойств NewsData - "InfotAuthor" и "InfotDate" - В нем есть "t"
Я использовал ваш код xaml (после внесения вышеуказанных изменений).
Без наследования INotifyPropertyChanged я могу просматривать данные. Я полагаю, что если вы сделаете вышеуказанные изменения, вы сможете увидеть данные в своем представлении.
Если вы хотите реализовать INotifyPropertyChanged, вы можете выполнить следующие действия:
publi c class NewsData: INotifyPropertyChanged {private string _title;
private string _message;
private string _date;
private string _author;
public string InfoAuthor
{
get { return _author; }
set
{
_author = value;
OnPropertyChanged("InfoAuthor");
}
}
public string InfoDate
{
get { return _date; }
set
{
_date = value;
OnPropertyChanged("InfoDate");
}
}
public string InfoMessage
{
get { return _message; }
set
{
_message = value;
OnPropertyChanged("InfoMessage");
}
}
public string InfoTitle
{
get { return _title; }
set
{
_title = value;
OnPropertyChanged("InfoTitle");
}
}
protected void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
Я сделал приватные члены, чтобы начать с "_" с верблюжьей оболочкой (это просто правильные соглашения об именах для внутренних полей)
Я реализовал OnPropertyChanged () и я вызываю из каждого метода установки свойства.
В вашем методе установки вы пытаетесь установить, как показано ниже, что неверно,
Date = InfotDate;
Вам необходимо установить "Дата = значение;"
Надеюсь, вы сможете понять разницу с моим обновленным ответом.
Попробуйте и сообщите нам, если у вас все еще есть любой другой вопрос.
Если он отвечает на ваш вопрос, примите его в качестве ответа.