首页 > 其他分享 >WPF ItemsControl Command 绑定操作

WPF ItemsControl Command 绑定操作

时间:2023-02-25 19:23:25浏览次数:48  
标签:ItemsCollection ItemsControl ItemViewModel item Command using new WPF public

视图模型:

using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Windows.Input;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

public class MainWindowViewModel : ObservableObject
{
    public ObservableCollection<ItemViewModel> ItemsCollection { get; } = new();

    public MainWindowViewModel()
    {
        ItemsCollection.Add(new ItemViewModel());
        ItemsCollection.Add(new ItemViewModel());
        ItemsCollection.Add(new ItemViewModel());
    }

    public ICommand RemoveCommand => _removeCommand ??= new RelayCommand<ItemViewModel>(item => Remove(item));
    private RelayCommand<ItemViewModel>? _removeCommand;

    private void Remove(ItemViewModel? item)
    {
        if (item is not null)
        {
            Debug.WriteLine($"Checked:{item.Checked}");

            ItemsCollection.Remove(item);
        }
    }
}

窗口的视图。ItemsControl.ItemTemplate的DataTemplate元素与UserControl相同,但绑定已修改

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApp"
        Title="MainWindow"
        Width="600" Height="300">
    <Window.DataContext>
        <local:MainWindowViewModel/>
    </Window.DataContext>

    <ScrollViewer VerticalScrollBarVisibility="Visible">
        <ItemsControl ItemsSource="{Binding ItemsCollection}"
                      HorizontalAlignment="Stretch" VerticalAlignment="Top">
            <ItemsControl.ItemContainerStyle>
                <Style>
                    <Setter Property="FrameworkElement.Margin" Value="5,20,0,0"/>
                </Style>
            </ItemsControl.ItemContainerStyle>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <CheckBox IsChecked="{Binding Checked, Mode=OneWayToSource}"/>
                        <Button Content="X"
                                Command="{Binding DataContext.RemoveCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
                                CommandParameter="{Binding DataContext, RelativeSource={RelativeSource Self}}"/>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
</Window>

 

Command的AncestorType要根据上下文具体而定

 

 

  

 

标签:ItemsCollection,ItemsControl,ItemViewModel,item,Command,using,new,WPF,public
From: https://www.cnblogs.com/rain-alone/p/17155109.html

相关文章

  • WPF知识点备忘录——样式
    <Window.Resources><!--只对Control类及其派生类有效,若改成Button则只对Button有效--><Stylex:Key="Style1"><SetterProperty="Con......
  • WPF知识点备忘录——控件
    Grid<GridMargin="3,3,10,3"><Grid.ColumnDefinitions><ColumnDefinitionWidth="auto"/><ColumnDefinitionWidth="*"/>......
  • WPF知识点备忘录——命令
    定义:跟应用程序的一些高级任务绑定的函数,可以避免重复的编写事件处理函数;当连接的命令不可用时,命令特性通过自动禁用控件来管理用户界面的状态。继承关系:Routed......
  • WPF资料整理1
    1、框架类Prism: https://github.com/PrismLibrary/PrismPrism是用于在WPF,Windows10UWP和XamarinForms中构建松耦合,可维护和可测试的XAML应用程序的框架ReactivUI:......
  • CF818E - Choosing The Commander
    题意:每次插入/删除一个数,或询问当前所有数中异或上\(p\)之后小于\(l\)的有多少个。看到动态最小化异或值的,我们首先想到\(\text{Trie}\),我们先建立一棵\(\text{Trie......
  • WPF图标库——MahApps.Metro.IconPacks
    1.https://github.com/MahApps/IconPacks.Browser下载下载后在bin目录下运行“IconPacks.Browser”挑选需要使用的图标运行后如下:  2.选择想要使用的图标,拷贝代码......
  • WPF知识点备忘录——元素绑定
    1.元素绑定<SliderName="sliderFontSize"Margin="3"Value="10"/><TextBlockMargin="10"Text="AAA"FontSize="{BindingElementName=sliderFontSize,Path=Val......
  • WPF知识点备忘录——依赖项属性、路由事件
    1.依赖项属性定义:在普通属性上封装了些专门用于实现WPF功能的属性publicstaticreadonlyDependencyPropertyMarginProperty;publicThicknessMargin......
  • WPF BackSpace 回退到上一个页面
    在Wpf程序中,有时候点击到某些控件后,再按下【BackSpace】键,画面会回到上一个TextBox可能自己处理了,所以没有这一个现象。 解决方案是:在App.xaml.cs的InitializeCompo......
  • 配置java环境后 Linux报错:bash:ls:command not find 如何解决
    Linux命令行输入命令执行后报“bash:ls:commandnotfound”,这是由于系统PATH设置问题,PATH没有设置正确,系统就无法找到精确命令了。解决办法:1、在命令行中输入:exp......