2016-06-21 6 views
1

私はアプリケーションを作成しています。ユーザーが新しいウィンドウ内の特定のアイテムをクリックし、オブジェクトが入力パラメータとして渡されたとき。窓のCSファイル内新しいウィンドウ内のテキストボックスのセットにオブジェクトプロパティをバインドする方法

private void GridItem_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    Grid item = (Grid)sender; 
    int itemId = Convert.ToInt32(item.Tag) - 1; 
    Bill_Overview BO = new Bill_Overview(Bills[itemId]); 
    BO.ShowDialog(); 
    BO.Owner = this; 
} 

あり、このです:

public DBConnection.Bill Bill { get; set; } 

public Bill_Overview(DBConnection.Bill bill) 
{ 
    InitializeComponent(); 
    Bill = bill; 
} 

はとBill_OverviewウィンドウのWPFの内側に私は財産ビルの各プロパティをバインドしたいのですが、私はそれを試してみたものは何でも動作しません。私はこれを私の現在の設定として持っていますが、これはうまくいきません。

<Grid DataContext="{Binding Bill}"> 
    <TextBox Margin="0,28,0,185" Text="{Binding Path=Payer, Mode=TwoWay}" /> 
    ... 
</Grid> 

これを修正する方法を知っている人はいますか?私はかなりのために解決策を探してみましたが、何も動作していないようです。

乾杯!

+0

プロパティが変更されたときにプロパティがバインディングエンジンに通知されないため、ビューで更新が必要であることがわかりません。私はあなたが素早い修正の代わりに根本的な原因を理解するように、あなたは主題を読むことをお勧めします。 –

+0

私はこれが何かINotifyPropertyChangedについて覚えているのでしょうか?しかし、私はそれを(まだ)実装する方法を知らない。しかし、Eyalによって与えられた解決策は、トリックを行い、ウィンドウの目的に役立ちます:) – DethoRhyne

+0

私のポイントは正確です。理由を完全に理解していない間に、この特定の問題を修正します。データバインディングとWPF(オンラインチュートリアルがたくさんあります)には、実践的なアプローチを試みるべきです。 –

答えて

2

C#で

DataContext="{Binding Bill}" 

次に、あなたのXAMLからのDataContextの代入式を削除し、次の操作を行います。

public DBConnection.Bill Bill { get; set; } 

public Bill_Overview(DBConnection.Bill bill) 
{ 
    InitializeComponent(); 
    Bill = bill; 
    DataContext = bill; 
} 

(DataContextのは、そう、ウィンドウのDataContextのを割り当て、要素の論理的な子供たちに継承されますグリッドで行ったことである独自の値を設定しない限り、すべての子のDataContextを効果的に更新します。

また、C#p roperty Billは依存プロパティではありません。それを割り当てると、更新がトリガーされず、ウィンドウは初期(null)値を使用し続けます。

+0

これはシンプルだったし、TwoWayバインディングでも動作します。 :) – DethoRhyne

+1

歓声..私は本当にあなたが依存性プロパティのメカニズムを見て、それをよりよく理解することをお勧めします.. XAMLを取引のツールとして使うつもりなら、それは非常に重要です。 –

関連する問題