所以,我有一個顯示付款清單的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綁定到Payment對象的ObservableCollection。
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; }
}
而且我有第二個DataGrid應該顯示所選付款的預訂對象列表。
<DataGrid ItemsSource="{Binding SelectedItem.Bookings, ElementName=dataGrid}" AutoGenerateColumns="True" />
我期望是什麼,每當我在DataGrid中1選擇付款項,DataGrid中2將與有關付款是如何分配的細節填充。然而,我得到的是一個空的細節DataGrid。
我知道我可以將SelectedItem屬性綁定到ViewModel中的屬性,並在每次更改屬性時通知我的View,但似乎DataGrid 2應該知道DataGrid 1的SelectedItem屬性已自動更改。我問的太多了,還是我做錯了?
你所描述的應該沒問題,但是惡魔在細節中。試試這個,看看你在VS輸出窗格中運行時看到了什麼,當你改變主網格中的選擇時:'ItemsSource =「{Binding SelectedItem.Bookings,ElementName = dataGrid,PresentationTraceSources.TraceLevel = High}」' –
Did you仔細檢查selectedItem的預訂列表是否不爲空?不能看到與給定的代碼的錯誤 –
應該工作,如果兩個DataGrids駐留在相同的命名範圍。確保所選付款的預訂集合已填充。 – mm8