バインディングに少し問題があります。SelectedItem
ので2 つのボタンをバインドしたいListBox
。
にListBox
はいくつかの値が含まれており、それらが表示されます (名前、年齢など)。ユーザーが の 1 つのエントリを選択すると、ListBox
[削除] と [変更] の 2 つのボタンがポップアップする (<- 表示される) ため、ボタンの可視性は の にバインドされ、ListBox-Item の隣にあるSelectedItem
ことを意味します。 ListBox
(iPhoneの「削除」ボタンのような)。
私のコードでは、アイテムを選択すると実際にボタンが表示されますが、問題は、すべてのアイテムのすべてのボタンが表示されていることです! 実際のコード (修正が必要) は次のとおりです (可視性部分)。
<Button DataContext="{Binding DataContext, ElementName=Window}" FontSize="15" Grid.Row="0" Content="Delete" Visibility="{Binding Path=SelectedItem, Mode=OneWay, ElementName=lbuser, Converter={StaticResource VisibilityConverter}}" Command="{Binding Delete}"/>
<Button DataContext="{Binding DataContext, ElementName=Window}" FontSize="15" Grid.Row="1" Content="Change" Visibility="{Binding Path=SelectedItem, Mode=OneWay, ElementName=lbuser, Converter={StaticResource VisibilityConverter}}" Command="{Binding Change}" />
しかし、誰かが完全なコードを必要とする場合は、ここにあります:
<Grid Height="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="212"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="15"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" x:Name="lbuser" ItemsSource="{Binding Users, Mode=TwoWay}" ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.ColumnSpan="2" SelectedItem="{Binding MySelectedListView, Mode=TwoWay}" Height="390" Width="Auto" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="15"/>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Bezeichnung}" Grid.ColumnSpan="4" FontSize="22.5" FontWeight="ExtraBold"/>
<TextBlock Grid.Row="1" Text="Name"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Name}"/>
<TextBlock Grid.Row="1" Grid.Column="2" Text="Age"/>
<TextBlock Grid.Row="1" Grid.Column="4" Text="{Binding Path=Age, Converter={StaticResource EuroConverter}}"/>
<TextBlock Grid.Row="2" Text="E-Mail"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=EMail}" Width="Auto"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="Phone"/>
<TextBlock Grid.Row="2" Grid.Column="4" Text="{Binding Path=Phone, Converter={StaticResource EuroConverter}}"/>
<TextBlock Grid.Row="3" Text="Born"/>
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Path=YearBorn}" Width="Auto"/>
<TextBlock Grid.Row="3" Grid.Column="2" Text="Birthplace"/>
<TextBlock Grid.Row="3" Grid.Column="4" Text="{Binding Path=Birthplace}"/>
</Grid>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button DataContext="{Binding DataContext, ElementName=Window}" FontSize="15" Grid.Row="0" Content="Delete" Visibility="{Binding Path=SelectedItem, Mode=OneWay, ElementName=lbuser, Converter={StaticResource VisibilityConverter}}" Command="{Binding Delete}"/>
<Button DataContext="{Binding DataContext, ElementName=Window}" FontSize="15" Grid.Row="1" Content="Change" Visibility="{Binding Path=SelectedItem, Mode=OneWay, ElementName=lbuser, Converter={StaticResource VisibilityConverter}}" Command="{Binding Change}" />
</Grid>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
</Grid>
編集:VisibilityConverter
public class VisibilityConverter : IValueConverter
{
#region [ IValueConverter ]
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return System.Windows.Visibility.Collapsed;
return System.Windows.Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
値は selecteditem です。つまり、ListBox に 2 つのアイテムがあり、1 つのアイテムをクリックすると、VisibilityConverter が 4 回呼び出され、Visibility が true に設定されます。コンバーターの 4 回の呼び出しにより、値は常に SelectedItem になります。