我在綁定時遇到了一些問題。我想將2個按鈕與ListBox
的SelectedItem
綁定。綁定到SelectedItem的按鈕可見性
ListBox
包含多個值並顯示它們(名稱,年齡...)。當用戶選擇ListBox
中的一個條目時,應彈出2個「刪除」和「更改」按鈕(<-可見),因此這意味着按鈕 - 可見性應該與ListBox
的SelectedItem
綁定,並且緊挨着列表框項目(如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
}
value是selecteditem,這意味着當ListBox有2個Items並且我點擊一個Item時,VisibilityConverter將被調用4次並將Visibility設置爲true。通過轉換器的4個調用,該值始終是SelectedItem。
VisibilityConverter有什麼作用? Visibilityconverter必須能夠處理SelectedItem的類型。您是否嘗試在實現VisibilityConverter時設置斷點? – Sascha
編輯的問題。 – Rudi