WPF アプリがあり、バインドに問題があります。私のUIはリンク上の画像のように見えます。(私は新しいユーザーであり、画像を投稿するにはポイントを獲得する必要があるため、画像を埋め込んでいないことをお詫びします)
http://i.stack.imgur.com/a1koN.jpg
基本的に、1 つの製品に複数の価格設定の詳細を含めることができます。この画面は、データベースから情報を取得する編集モードの画面です (このサンプルのために、値をハードコーディングしました)。項目を選択するdatagrid
と、それぞれのテキスト ボックスに情報が読み込まれます。これは現在正常に動作しています。変更したいのは、テキストボックスの値を変更したときの動作だけです。これは、datagrid
すぐに更新されるためです。EDIT
ボタンがクリックされたときにのみデータグリッドを更新することは可能でしょうか? この時点で行われた変更はデータベースにまだ保存されていないことに注意してくださいUPDATE
。ボタン (上部) がクリックされたときにのみ保存されます。
XAML ファイルのスニペットを次に示します。
データグリッド
<DataGrid AutoGenerateColumns="False" AlternationCount="2" Height="100" ItemsSource="{Binding ProductPrices, Mode=TwoWay}" SelectedItem="{Binding ProductPrice}" IsReadOnly="True" SelectionMode="Single" GridLinesVisibility="Horizontal">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding UnitPrice, StringFormat=\{0:N\}}" Header="Unit Price" Width="100" />
<DataGridTextColumn Binding="{Binding LowestPrice, StringFormat=\{0:N\}}" Header="Lowest Price" Width="100"/>
<DataGridTextColumn Binding="{Binding EffectiveDate, StringFormat=\{0:d\}}" Header="Effective Date" Width="150"/>
</DataGrid.Columns>
</DataGrid>
テキストボックス
<TextBox Grid.Column="1" Grid.Row="0" Text="{Binding Path=ProductPrice.UnitPrice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat=\{0:N\}}" Width="100" />
<TextBox Grid.Column="3" Grid.Row="0" Text="{Binding Path=ProductPrice.LowestPrice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat=\{0:N\}}" Width="100" />
<DatePicker Grid.Column="1" Grid.Row="1" Text="{Binding Path=ProductPrice.EffectiveDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" Width="100" />
ビューモデル
private Product _product;
public Product Product
{
get { return _product; }
set
{
_product = value;
NotifyPropertyChanged(m => m.Product);
}
}
private ProductPrice _productPrice;
public ProductPrice ProductPrice
{
get { return _productPrice; }
set
{
_productPrice = value;
NotifyPropertyChanged(m => m.ProductPrice);
}
}
private ObservableCollection<ProductPrice> _productPrices;
public ObservableCollection<ProductPrice> ProductPrices
{
get { return _productPrices; }
set
{
_productPrices = value;
NotifyPropertyChanged(m => m.ProductPrices);
}
}
UpdateSourceTrigger=PropertyChanged
犯人に違いない。しかし、私はまだこのケースを解決する方法についての考えを持っていません. MVVM
これはアプローチを使用して達成可能ですか?
SkyDriveにソース コードをアップロードしました