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