我有一個帶有多個項目的ListView。 ListViewItems是一個模板,其中包含有關ObservableCollection和Button中項目的詳細信息。根據ListView中的位置觸發按鈕的可見性
我的目標是讓按鈕只在最後一個ListViewItem上可見。爲此,我實現了一個轉換器並將其綁定到Button的可見性,該可見性檢查ListViewItem的索引與ListView的計數並返回Visibility.Visible或Visibility.Collapsed。
這工作正常,當頁面第一次加載,但是當我添加額外的項目到ListView,它不會更新現有的ListViewItems,它只運行新的項目的轉換器。
是否有一個很好的xaml(MVVM友好)的方式來觸發它來運行綁定?
我的XAML:
<ListView x:Name="lstBox" ItemsSource="{Binding People}" Background="Yellow" >
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="{Binding Firstname}" />
<Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Path=DataContext.AddPersonCommand}" Content="Add Person" Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Converter={StaticResource IsLastItemToVisibilityConverter}}" />
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的轉換器:
public class IsLastItemToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ListViewItem item = value as ListViewItem;
ListView ListView = ItemsControl.ItemsControlFromItemContainer(item) as ListView;
int index = ListView.ItemContainerGenerator.IndexFromContainer(item);
if (index == ListView.Items.Count - 1)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
爲什麼不把一個按鈕放在列表視圖(在最後一項可能),而不是? –
我相信你必須實現'ConvertBack'並將綁定模式設置爲'TwoWay' – Ninglin
單個按鈕將是我的首選解決方案,但我給出的要求是這樣做。 –