所以,我有一个datagrid显示了付款列表。
<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绑定到付款对象的观察力。
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。
我知道我可以将SelectionItem属性与ViewModel中的属性联系起来,并在每次更改属性时都会通知我的视图,但是似乎DataGrid 2应该知道DataGrid 1的SelectionItem属性已自动更改。我问太多了,还是我只是做错了?
确保预订的属性是公开的。
您可能还需要使用intudatesOurCetrigger = property changing insectionItem绑定中的属性,如:
ItemsSource="{Binding SelectedItem.Bookings, ElementName=dataGrid, UpdateSourceTrigger=PropertyChanged}"
如果这无济DataGrid2通过DataGrid1的SelectionChanged EventHandler
从WPF中的列表中管理亲子选择的三种常见方法
- 使用儿童网格的绑定中的"/"语法
- 在ViewModel中专门添加SelectedItem属性,将其设置在父母网格并在孩子网格中阅读
- 声明将父网格绑定到Collection ViewSource并设置当经过当前的事件的事件时,儿童电网的数据源CollectionViewSource开火。
选项 2 是最常见的。就个人而言,我更喜欢使用 3 ,因为它使我能够在我的ViewModel中移动fert/last/next/上一个。
您似乎正在寻找 1 ,这是最简单的方法,但也是最不强大的方法。您需要做的就是将您在孩子网格中的绑定更改为
<DataGrid ItemsSource="{Binding Payments/Bookings}" AutoGenerateColumns="True" />
请注意,我删除了元素名称,这是错误的;您要绑定到数据tacontext,而不是父级网格上的属性。