开源WPF-Samples-netframework学习(1)Data Binding——EditingCollections

该文详细介绍了GitHub上的WPF相关示例,重点讲解了HeaderedContentControl的使用,如何通过ContentPresenter在Style中显示内容,以及ListView的Items如何利用IEditableCollectionView接口进行编辑操作。通过ChangeItem界面和Edit功能的代码分析,展示了单条数据设置和编辑的实现过程。
摘要由CSDN通过智能技术生成

案例地址: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();
            }
        }
 

你可以使用以下步骤将 ComboBox 的 SelectionChanged 事件绑定到 ViewModel 中的一个命令: 1. 在 ViewModel 中定义一个 ICommand 属性,用于处理 ComboBox 的 SelectionChanged 事件。 ```csharp private ICommand _comboBoxSelectionChangedCommand; public ICommand ComboBoxSelectionChangedCommand { get { if (_comboBoxSelectionChangedCommand == null) { _comboBoxSelectionChangedCommand = new RelayCommand<object>(ComboBoxSelectionChanged, CanComboBoxSelectionChanged); } return _comboBoxSelectionChangedCommand; } } private bool CanComboBoxSelectionChanged(object parameter) { // 可选:检查命令是否可用 return true; } private void ComboBoxSelectionChanged(object parameter) { // 处理 ComboBox 的 SelectionChanged 事件 } ``` 2. 在 XAML 中,将 ComboBox 的 SelectionChanged 事件绑定到上面定义的命令,并使用 CommandParameter 属性将 ComboBox 本身作为参数传递给命令。 ```xml <ComboBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" SelectionChanged="{Binding ComboBoxSelectionChangedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> ``` 注意,在上面的代码中,我使用了一个 RelayCommand 类来实现 ICommand 接口,你可以根据需要使用其他实现方式来绑定命令。另外,我还使用了 CommandParameter 属性将 ComboBox 本身作为参数传递给命令,这样在 ViewModel 中就可以访问 ComboBox 的属性和方法了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值