在UserControl中绑定Textblock

时间:2018-05-05 09:52:26

标签: c# wpf binding controls

我正在学习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; }
    }

我希望通过

从db获取数据
 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();

    }

在上面的例子中只有名称,现在我有问题如何绑定我得到的文本块并在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 :(得分:1)

您是否实现了INotifyPropertyChanged接口?

答案 1 :(得分:1)

你应该读一下MVVM 将datacontext设置为self的样本都非常好,因为它们“工作”,但它们是微不足道的。几乎没有人会在商业上做到这一点。

在MVVM中,你有一个viewmodel - 一个实现inotifypropertychanged的类。这充当视图和模型之间的一种适配器。该模型是您的数据和使用datareader的代码 您的viewmodel将调用该代码并将observablecollection中的数据呈现给视图 这些“行”数据中的每一个通常都是视图模型。

有许多方法可以实例化视图模型并将其设置为视图的datacontext。在XAML中最简单的方法之一。
您可以在这里看到一些非常基本的介绍性代码:

https://social.technet.microsoft.com/wiki/contents/articles/31915.wpf-mvvm-step-by-step-1.aspxhttps://social.technet.microsoft.com/wiki/contents/articles/32164.wpf-mvvm-step-by-step-2.aspx

几乎所有商业团队都使用类似ORM的实体框架或dapper,它返回填充数据的对象,而不是逐列工作。

不幸的是,从no-mvvm体验到工作商业级数据库导向应用程序的步骤是巨大的,所以在论坛帖子中解释所有这些并不是那么实用。