Обязательный текстовый блок в UserControl - PullRequest
0 голосов
/ 05 мая 2018

Я изучаю WPF и c #, и я пытаюсь сделать привязку текстового блока в usercontrol.

У меня есть класс Seller.cs

  public class SellerInfo
    {
        public string Name { get; set; }
        public string ID { get; set; }
        public float workTime { get; set; }
        public float loginTime { get; set; }
        public int soldTickets { get; set; }
        public int ticketReservation { get; set; }
        public float totalAmountP { get; set; }
    }

И я хочу получить эти данные из БД по

 public void accountInfo()
    {
        con = new SqlConnection(@"Data Source=DESKTOP-8T7J7IH;Initial Catalog=Db1234;Integrated Security=True");
        con.Open();
        string s1 = @"SELECT Name +' ' + Surname FROM Seller WHERE LoginUser = '12345'";
        cmd = new SqlCommand(s1, con);
        SqlDataReader rd = cmd.ExecuteReader();
        do
        {
            while (rd.Read())
            {
                {
                    SellerInfo item = new SellerInfo();
                    item.Name = rd.GetString(0);

                };
            }
        }
        while (rd.NextResult());
        rd.Close();

    }

В приведенном выше примере только имя, теперь у меня есть вопрос, как связать то, что я получил, с textblock и показать его в usercontrol?

Я создал что-то вроде:

<TextBlock x:Name="sellerName" HorizontalAlignment="Left" Margin="112,20,0,0" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Top" Width="166"/>

И прочитайте об этом, в UserControl я должен использовать DataContext="{Binding RelativeSource={RelativeSource Self}}", позже я попытался установить DataContext=this;, но это все еще безрезультатно. Я прочитал много статей об этом, но я не могу понять, как получить это на этом примере.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы должны немного прочитать о MVVM.
Образцы, которые устанавливают для себя datacontext, очень хороши тем, что они «работают», но они тривиальны. Почти никто не собирается делать это в коммерческих целях.

В MVVM у вас есть viewmodel - класс, реализующий inotifypropertychanged. Это действует как своего рода адаптер между представлением и моделью. Модель - это ваши данные и этот код с устройством чтения данных.
Ваша модель представления будет вызывать этот код и представлять данные в наблюдаемой коллекции для представления.
Каждая из этих «строк» ​​данных часто является самим моделями представления.

Существует множество способов создания экземпляра модели представления и установки его как текстового контекста представления. Один из самых простых способов сделать это в XAML.
Вы можете увидеть очень простой вводный код здесь:

https://social.technet.microsoft.com/wiki/contents/articles/31915.wpf-mvvm-step-by-step-1.aspx а также https://social.technet.microsoft.com/wiki/contents/articles/32164.wpf-mvvm-step-by-step-2.aspx

Практически все коммерческие группы используют ORM-подобную инфраструктуру сущностей или dapper, которая возвращает объекты, заполненные данными, вместо того, чтобы работать столбец за столбцом.

К сожалению, шаг от no-mvvm-experience к работающему коммерческому приложению, ориентированному на базу данных, огромен, поэтому объяснять все, что в сообщении на форуме не так уж и практично.

0 голосов
/ 05 мая 2018

Реализовали ли вы интерфейс INotifyPropertyChanged?

...