2

我有一个基本的 ListView,它的 XAML 可以在下面找到。基本上,在我填充东西之后,我希望能够删除它们,因此“X”按钮:

<ListView Name="selectedPeople" ItemsSource="{Binding Path=map, RelativeSource={RelativeSource AncestorType=Window},
                Mode=OneWay}" Width="480" Height="200" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,225,10,0"
                SelectionChanged="selectedPeople_SelectionChanged">
         <ListView.View>
            <GridView AllowsColumnReorder="True" ColumnHeaderToolTip="Broadcast call targets">
               <GridViewColumn DisplayMemberBinding="{Binding Path=Key}"   Header="ID"      Width="120" />
               <GridViewColumn DisplayMemberBinding="{Binding Path=Value}" Header="Description" Width="320" />
               <GridViewColumn Header="" Width="30">
                  <GridViewColumn.CellTemplate>
                     <DataTemplate>
                        <Button Content=" X " Visibility="Hidden" />
                     </DataTemplate>
                  </GridViewColumn.CellTemplate>
               </GridViewColumn>
            </GridView>            
         </ListView.View>      
      </ListView>

默认情况下,我使 X 按钮不可见,因为所需的行为是它只在选中行时出现。如何做到这一点,即更改所选更改按钮的可见性?此外,一旦单击,我如何关联按钮与哪个行/项目相关联?

4

3 回答 3

3
  1. 将按钮绑定到 item.IsSelected

    <Button Content=" X " Visibility="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}} Converter={StaticResource yourConverter}}" Command="{Binding DeleteCommand}"/>
    
  2. 将转换器从 bool 写入 Visibility ( IValueConverter )

    [ValueConversion(typeof(bool), typeof(Visibility))]
    public class BoolToVisibilityConverter : IValueConverter
    {
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
        var boolValue = (bool) value;
        return boolValue ? Visibility.Visible : Visibility.Collapsed;
      }
    
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
      {
        throw new NotImplementedException();
      }
    }
    
  3. 在绑定到 ListView 中的项目的 ViewModel 中创建 DeleteCommand(通过实现 ICommand 接口)并将按钮绑定到它

    public class ItemViewModel {
      ICommand DeleteCommand {get;set;}
    }
    
于 2012-09-06T14:24:10.790 回答
3

您可以使用其 IsEnabled 属性更改按钮列模板,如下所示。

<GridViewColumn Width="30" Header="">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content=" X " IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

或者您可以使用转换器或触发器来提高可见性。

 <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter1" />
    </Window.Resources>
  <GridViewColumn Width="30" Header="">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel>

                                    <Button Content=" X " Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected, Converter={StaticResource BooleanToVisibilityConverter1}}" />
                                </StackPanel>

                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
于 2012-09-06T14:36:56.480 回答
1

试试这个:

    <ListView Name="selectedPeople" ItemsSource="{Binding Path=map, RelativeSource={RelativeSource AncestorType=Window},
                    Mode=OneWay}" Width="480" Height="200" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,225,10,0"
                   >
 <ListView.Resources>
                <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter1" />
            </ListView.Resources>
             <ListView.View>
                <GridView AllowsColumnReorder="True" ColumnHeaderToolTip="Broadcast call targets">
                   <GridViewColumn DisplayMemberBinding="{Binding Path=Key}"   Header="ID"      Width="120" />
                   <GridViewColumn DisplayMemberBinding="{Binding Path=Value}" Header="Description" Width="320" />
                   <GridViewColumn Header="" Width="30">
                      <GridViewColumn.CellTemplate>
                         <DataTemplate>
                            <Button Content="X" 
                                        Visibility="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Converter={StaticResource BooleanToVisibilityConverter1}}"
                                        Command="{Binding DeleteCommand}"
                                        CommandParameter="{Binding}"
                                        />
                         </DataTemplate>
                      </GridViewColumn.CellTemplate>
                   </GridViewColumn>
                </GridView>            
             </ListView.View>      
          </ListView>

不要忘记创建创建删除命令

于 2012-09-06T14:37:53.040 回答