私は、支払いリストを表示するDataGridを持っています。バッキング変数/プロパティを更新せずにDataGridのSelectedItemにバインドできますか?
<DataGrid x:Name="dataGrid" ItemsSource="{Binding Payments}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="PaymentDate" Binding="{Binding PaymentDate, StringFormat=\{0:d\}}" />
<DataGridTextColumn Header="Amount" Binding="{Binding Amount, StringFormat=\{0:N\}}" />
<DataGridTextColumn Header="Comment" Binding="{Binding Comment}" />
<DataGridTextColumn Binding="{Binding EventCode}" Header="Event Code"/>
<DataGridTextColumn Binding="{Binding DueDate, StringFormat=\{0:d\}}" Header="DueDate"/>
</DataGrid.Columns>
</DataGrid>
このDataGridは、ObservableCollection of Paymentオブジェクトにバインドされています。
public class Payment
{
public Guid ID { get; set; }
public DateTime PaymentDate { get; set; }
public decimal Amount { get; set; }
public string Comment { get; set; }
public string EventCode { get; set; }
public DateTime? DueDate { get; set; }
List<Booking> Bookings
{
get { ...magic that retrieves booking info... }
}
}
ご覧のとおり、各支払いには、各支払いの割り当て方法を示す予約オブジェクトのリストであるプロパティがあります。
予約オブジェクトはかなりシンプルです。
public class Booking
{
public string EventCode { get; set; }
public decimal Amount { get; set; }
public DateTime? BookingDate { get; set; }
public string Designation { get; set; }
public string Comment { get; set; }
}
また、選択した支払いの予約オブジェクトの一覧を表示する2番目のDataGridがあります。私が期待したもの
<DataGrid ItemsSource="{Binding SelectedItem.Bookings, ElementName=dataGrid}" AutoGenerateColumns="True" />
は、私はDataGridの1で支払項目を選択したときに、データグリッド2は、その支払いが割り当てられたかの詳細が移入されるだろうということでした。私が得たものは、空の詳細DataGridでした。
私は、ViewModelのプロパティにSelectedItemプロパティを関連付け、そのプロパティが変更されるたびに通知することができますが、DataGrid 2はDataGrid 1のSelectedItemプロパティが自動的に変更されたことを知っている必要があります。あまりにも多くを求めているのですか、それとも間違っていますか?
あなたが説明した内容はすばらしいはずですが、悪魔は詳細です。これを試して、実行時にVS出力ペインでマスターグリッドの選択を変更すると表示されているものを確認してください: 'ItemsSource =" {Binding SelectedItem.Bookings、ElementName = dataGrid、PresentationTraceSources.TraceLevel = High} "' –
選択したアイテムの予約リストが空でないことを再度確認しますか?指定されたコードでエラーが表示されない –
両方のDataGridが同じ名前付けスコープに存在する場合は、動作する必要があります。選択した支払いの予約コレクションに値が設定されていることを確認します。 – mm8