0
我无法理解DataGrid与ListView之间双向绑定的处理差异。为了说明,我有一个类的DataItem具有几个特性,并DataItems的用于结合到DataGrid/ListView的列表:双向绑定DataGrid与ListView
public class DataItem
{
public bool Flag { get; set; }
public int IntValue { get; set; }
public string StringValue { get; set; }
public List<DataItem> SubList { get; set; }
public DataItem()[...]
}
创建与一些附加的DataItem对象的主要的DataItem对象ADDE到子列表。主的DataItem被设定为包含网格的DataContext的,并且子列表绑定到既一个ListView:
<ListView ItemsSource="{Binding Path=SubList}">
<ListView.View>
<GridView>
<GridViewColumn Header="Flag" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="FlagCheckBox" IsChecked="{Binding Path=Flag}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="String Value" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Name="StringTextBox" Text="{Binding Path=StringValue}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
和到数据网格:
<DataGrid ItemsSource="{Binding Path=SubList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Flag" Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="FlagCheckBox" IsChecked="{Binding Path=Flag}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="String Value" Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Name="StringTextBox" Text="{Binding Path=StringValue}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
两者ListView和数据网格适当地显示子清单项目。但是,当我修改UI中的数据并检查源DataItem.SubList时,ListView工作并且DataGrid没有:我可以在ListView中看到这些更改,但是当更改在DataGrid没有变化。
绑定必须是正确的,否则我不会看到值正确显示。但出于某种原因,双向绑定在ListView中将把UI中所做的更改移回源对象,但不会在DataGrid中。
谢谢,这看起来像它的工作原理。奇怪的是,UpdateSourceTrigger的默认设置是不更新源。 – garzooma