案例地址:GitHub - microsoft/WPF-Samples: Repository for WPF related samples
一、运行界面
二、案例功能描述
知识点:
1、HeaderedContentControl: 提供所有控件的包含单个内容并具有一个标头的实现。
2、ContentPresenter:在Style中设置,显示ContentControl的内容,这里显示HeaderedContentControl的内容。
3、ListView的Items为ItemCollection类型,继承IEditableCollectionView接口,通过CommitEdit()方法保存修改,CancelEdit()方法结束编辑,并还原初始值。
三、分析代码
1、ChangeItem界面:实现单条数据的设置
实现Style:设置HeaderedContentControl的内容,设置上下文。
<Style TargetType="HeaderedContentControl">
<Setter Property="Margin" Value="2"/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="HeaderedContentControl">
<DockPanel LastChildFill="False">
<ContentPresenter ContentSource="Header" DockPanel.Dock="Left"
Focusable="False" VerticalAlignment="Center"/>
<ContentPresenter ContentSource="Content" Margin="5,0,0,0"
DockPanel.Dock="Right" VerticalAlignment="Center"/>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
实现数据绑定
<HeaderedContentControl Header="Description">
<TextBox Width="150" Text="{Binding Path=Description, Mode=TwoWay}"/>
</HeaderedContentControl>
2、设置Edit:通过将ChangeItem的ContentText设置为ListView的SelectItem,实现对当前Item的编辑。
private void Edit_Click(object sender, RoutedEventArgs e)
{
if (itemsControl.SelectedItem == null)
{
MessageBox.Show("No item is selected");
return;
}
var editableCollectionView =
itemsControl.Items as IEditableCollectionView;
// Create a window that prompts the user to edit an item.
var win = new ChangeItem();
editableCollectionView.EditItem(itemsControl.SelectedItem);
win.DataContext = itemsControl.SelectedItem;
// If the user submits the new item, commit the changes.
// If the user cancels the edits, discard the changes.
if ((bool) win.ShowDialog())
{
editableCollectionView.CommitEdit();
}
else
{
editableCollectionView.CancelEdit();
}
}