gpt4 book ai didi

c# - UWP - MVVM - 使用 ItemTemplate 按钮删除 ListView 项目

转载 作者:行者123 更新时间:2023-12-03 10:25:56 25 4
gpt4 key购买 nike

我有一个显示项目列表的屏幕,用户可以单击一个按钮从列表中删除相应的项目。

我正在尝试使用 MVVM 这样做。

但是该项目在获取操作时不知道包含列表。
我在这里和那里看到了一些答案,但没有一个使用我在我的环境中拥有的开箱即用的 MVVM 功能
例如使用 PRISM 的那个(不知道我是否也应该使用它,它是标准的吗?):

  • How to properly remove Items from a ListView when the ItemTemplate is a User Control?

  • 这是 XAML:
    <ListView ItemsSource="{Binding MyItemList}" SelectionMode="None" ScrollViewer.VerticalScrollMode="Disabled" ItemContainerTransitions="{x:Null}"> 
    <ListView.ItemTemplate>
    <DataTemplate >
    <Grid Grid.Row="1" HorizontalAlignment="Stretch" >
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="2*" />
    <ColumnDefinition Width="2*" />
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" Text="{Binding ItemClass.Property01, Mode=TwoWay}" />
    <Button Grid.Column="1" Command="{Binding RemoveItemCommand}" >
    <SymbolIcon Symbol="Cancel" />
    </Button>
    </Grid>
    </DataTemplate>
    </ListView.ItemTemplate>
    </ListView>

    这是 ModelView 列表:
    private static ObservableCollection<ItemClass> _MyItemList = new ObservableCollection<ItemClass> {
    new ItemClass{ Property01 = "Sometext" }
    };
    public ObservableCollection<ItemClass> MyItemList { get { return _MyItemList; } }

    我希望能够执行以下操作(主模型 View 中的代码示例,如果需要解决问题,我可以创建一个项目模型 View ):
    public IMvxCommand RemoveItemCommand { get; private set; }
    public MyViewModel(IUserDialogs dialogs)
    {
    RemoveItemCommand = new MvxCommand(RemoveItem);
    }
    public void RemoveItem(object theItem) { MyItemList.Remove(theItem); }

    最佳答案

    添加 x:Name="listView"属性到您的 ListView,然后在模板中

    <Button Grid.Column="1"
    Command="{Binding ElementName=listView, Path=DataContext.RemoveItemCommand}"
    CommandParameter="{Binding}" >

    但是,当我遇到这样的问题时,我通常只使用后面的代码。原因是,我可以在 Visual Studio 中对 C# 代码使用调试器,但调试这些复杂的绑定(bind)要困难得多。这是一个 C# 版本,代码更简洁,更易于调试:
    void removeItem_Click( object sender, RoutedEventArgs e )
    {
    object i = ((FrameworkElement)sender).DataContext;
    ( this.DataContext as MyViewModel )?.RemoveItem( i );
    }

    或者这只是我个人的喜好。

    关于c# - UWP - MVVM - 使用 ItemTemplate 按钮删除 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50108083/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com