1

私は WPF を学習しようとしており、LINQ to 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がこれを処理するはずだと思っていましたか?

4

2 に答える 2

1

少なくとも、UI とデータ層の間に抽象化の層を追加する必要があります。データを永続化するには、ユーザー オブジェクトのプロパティを更新するだけでなく、コンテキストを保存する必要があります。いずれにせよ、これはベスト プラクティスではありません。また、テキスト ボックスがフォーカスを失うたびに、データベースへのトリップが発生するという事実について考えてみてください。とにかく抽象化レイヤーを追加し、コンテキストをプロパティのセッターに保存するとうまくいくはずです。

于 2012-04-22T21:04:27.753 に答える
0

バインドの経験はほとんどありませんが、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:

これがうまくいかない場合は、 を明示的に呼び出す必要があるかもしれませSubmitChanges()DataContext

于 2012-04-22T21:00:26.043 に答える