私はWPFで基本的なプロジェクトを持っています。
製品を取得/更新するだけです。
下の画像に示すように、ユーザーが ID を入力すると、それに応じてデータが表示されます。ユーザーはデータを変更し、[製品を保存] をクリックしてデータベースに保存することができます。
このGetProduct(int id)
関数は、提供された ID によって製品を取得します。
関数はSaveProduct()
変更されたフィールドを保存します。
また、2 つの DataTemplates があります
。1) ProductModel の場合 - ProductId、ProductName、UnitPrice の 3 つのテキストボックスが含まれます。
2) ProductViewModel の場合 - 保存/取得ボタン + ユーザーが目的の製品の ID を入力するためのテキストボックスが含まれます。
私がやろうとしているのは、ユーザーが [製品を保存] ボタンをクリックしたときに変更されたデータを取得することです。
私の意見では、最も理想的な方法は、を使用することBinding
です。
各テキストボックスは既にバインドされていますが、バインドされたデータを取得する方法がわかりません。
FIRST DataType (ProductModel) のバインドされたテキスト ボックスの例を次に示します。
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding ProductId}" Margin="5" Width="150" />
ProductId
、ProductName
およびのプロパティごとに 1 つありますUnitPrice
。
重要:Get/SaveProduct()
関数は にありますがProductViewModel class
、実際の製品クラスは - ご想像のとおり -ですProductModel
。このProductViewModel
クラスは、表示されている現在の製品を含む変数を保持します。
これは、情報を保存するために使用されるボタンです。これは、SECOND DataType (ProductViewModel) に書き込まれます。
<Button Content="Save Product" DockPanel.Dock="Right" Margin="10,2" VerticalAlignment="Center" Command="{Binding Path=SaveProductCommand}" Width="100" />
コマンドはSaveProductCommand
単にSaveProduct()
関数を起動します。
この件全体に関していくつか質問があります。
バインディングが次のように使用されるとはどういう意味ですか :
{Binding ProductId}
?私が覚えている限り、テキストボックスのデフォルトのバインドモードは TwoWay です。しかし、この場合、ProductId/Name + UnitPrice は依存関係のプロパティではないため、テキスト ボックス内のテキストが変更されたときに、バインドされた値が更新されない/返されないのは正しいでしょうか? (イベントは付いていないので…)
プロジェクトでデータ コンテキストが構成されたことはありませんが、XAML ページのすべての "バインディング タグ" にソースが定義されていないようです。ソースが実際に
DataType
はDataTemplate
、バインドされたオブジェクトを含む である可能性はありますか?2 番目の DataTemplate (ProductViewModel のもの) には、次の ContentControl タグがあります
<ContentControl Margin="10" Content="{Binding Path=CurrentProduct}" />
。
その目的は何ですか?TwoWay バインディングが発生した/発生した場合、関数内から値を取得するにはどうすればよい
SaveProduct()
ですか?CurrentProduct.ProductName
変更された名前を取得するために参照するだけですか?
時間を割いて回答してくださった皆様、本当にありがとうございました。