繁体   English   中英

具有WPF数据上下文的LINQ to SQL

[英]LINQ to SQL with WPF Data Context

我正在尝试学习WPF,并试图找出将LINQ与SQL类绑定到WPF窗口的最佳方法。

到目前为止,我有这个:

using (Database.DataClasses1DataContext db = new Database.DataClasses1DataContext())
{
    var user = db.Users.Where(u => u.Email == TextboxEmail.Text).FirstOrDefault();
    CustomerTab.DataContext = user;
}

XAML中

<TextBox Name="TextboxContactName" Grid.Row="1" Margin="0,2" Grid.Column="1" Text="{Binding Path=ContactName, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"></TextBox>

因此,这提供了一个单向绑定,可在文本框中显示名称。

我一直在尝试在线跟踪示例,但是我的问题是,当文本框失去焦点时,如何使它自动更新LINQ。

我是否需要在失焦事件中手动输入?

编辑我尝试在文本框失去焦点时运行此命令:

   using (Database.DataClasses1DataContext db = new Database.DataClasses1DataContext())
    {
        Database.User customer = (Database.User)CustomerTab.DataContext;

        db.SubmitChanges();
    }

但是客户对象没有更新。 我知道我可以做:

customer.ContactName = textbox.Text;
db.submitChanges();

但是我以为WPF应该为我解决这个问题?

您至少应该在UI和数据层之间添加一个抽象层。 为了持久保存数据,您需要保存上下文,而不仅仅是更新用户对象中的属性。 无论如何,这都不是最佳实践,请尝试考虑以下事实:每次文本框失去焦点时,都会有一次数据库访问。 无论如何,添加抽象层并将上下文保存在属性的设置器中都应该对您有用。

我对绑定的经验很少,但是请在您的XAML中尝试以下操作:

<TextBox Name="TextboxContactName" Grid.Row="1" Margin="0,2" Grid.Column="1" Text="{Binding Path=ContactName, UpdateSourceTrigger=LostFocus}"></TextBox>

编辑1:

精美打印 -“ UpdateSourceTrigger属性指定何时使用更改来更新源。这仅在Mode = TwoWay绑定(默认设置)下有效。”

编辑2:

如果这不起作用,则可能需要在DataContext上显式调用SubmitChanges()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM