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 ボタンが表示されるようにすることが望ましい動作であるため、デフォルトで 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 で (ICommand インターフェイスを実装することにより) DeleteCommand を作成し、それにボタンをバインドします。

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