亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

UWP-MVVM-使用ItemTemplate按鈕刪除ListView項目

UWP-MVVM-使用ItemTemplate按鈕刪除ListView項目

C#
慕容森 2021-05-07 17:45:44
我有一個顯示項目列表的屏幕,用戶可以在該屏幕上單擊按鈕以從列表中刪除相應的項目。我正在嘗試使用MVVM這樣做。但是,當該項目執行操作時,它并不知道包含列表。我在這里和那里看到了一些答案,但是沒有一個使用我在環境中具有的現成的MVVM功能。這是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; } }我希望能夠執行以下操作(來自主模型視圖的代碼示例,如果需要解決,我可以創建一個項目模型視圖):public IMvxCommand RemoveItemCommand { get; private set; }public MyViewModel(IUserDialogs dialogs){    RemoveItemCommand = new MvxCommand(RemoveItem);}public void RemoveItem(object theItem) { MyItemList.Remove(theItem); }
查看完整描述

3 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

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


<Button Grid.Column="1"

    Command="{Binding ElementName=listView, Path=DataContext.RemoveItemCommand}"

    CommandParameter="{Binding}" >

但是,當我遇到這樣的問題時,我通常只是在后面使用代碼。這樣做的原因是,我可以在Visual Studio中為C#代碼使用調試器,但是調試這些復雜的綁定要困難得多。這是一個C#版本,代碼是IMO清潔器,更易于調試:


void removeItem_Click( object sender, RoutedEventArgs e )

{

    object i = ((FrameworkElement)sender).DataContext;

    ( this.DataContext as MyViewModel )?.RemoveItem( i );

}

也許那只是我的個人喜好。


查看完整回答
反對 回復 2021-05-21
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

最好在列表視圖中具有上下文菜單項(或頁面上某處的刪除按鈕)以刪除當前選定的項。然后,您可以從列表視圖中獲得選擇。

或者,您可以將上下文菜單附加到PrepareContainterForItemOverride中的列表視圖項(并在另一個Override方法中將其分離)

那將是一種更加標準的交互方式。

如果必須在列表視圖項中包含按鈕,那么獲取列表項的最簡單方法可能是使用可視樹幫助器從按鈕轉到列表視圖項,然后從列表中獲取實際項查看項目。


查看完整回答
反對 回復 2021-05-21
  • 3 回答
  • 0 關注
  • 440 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號