我正在学习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;
但它仍然没有结果。我读了很多关于它的文章,但我无法弄清楚如何在这个例子中得到它。
提前谢谢
答案 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.aspx 和 https://social.technet.microsoft.com/wiki/contents/articles/32164.wpf-mvvm-step-by-step-2.aspx
几乎所有商业团队都使用类似ORM的实体框架或dapper,它返回填充数据的对象,而不是逐列工作。
不幸的是,从no-mvvm体验到工作商业级数据库导向应用程序的步骤是巨大的,所以在论坛帖子中解释所有这些并不是那么实用。