我有一个ItemsControl绑定物品。正如您在屏幕截图中看到的,这些项目绑定到一个属性,我希望出现一个额外的项目,它的行为与其他项目完全不同。我怎样才能做到这一点(最好只使用 xaml)?
小智 6
根据评论,这里是第一个示例中的示例代码
<ComboBox>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Content="All" />
<CollectionContainer Collection="{Binding Source={StaticResource AllBitsSource}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
编辑- MVVM
CollectionContainer 的问题在于它无法访问当前的 DataContext。静态资源解决它
xml
<Window x:Class="WpfApplication5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:WpfApplication5"
Title="MainWindow" Height="300" Width="525" FontSize="25">
<StackPanel Name="stk">
<StackPanel.Resources>
<CollectionViewSource x:Key="cvsBooks" Source="{Binding Path=Books}" />
</StackPanel.Resources>
<ListBox>
<ListBox.ItemsSource>
<CompositeCollection>
<ListBoxItem>
<StackPanel>
<TextBlock Margin="5,0">Not tagged</TextBlock>
</StackPanel>
</ListBoxItem>
<CollectionContainer Collection="{Binding Source={StaticResource cvsBooks}}"/>
</CompositeCollection>
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="Add" Click="Button_Click"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var vm = new ViewModel();
this.stk.DataContext = vm;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//should be Command in MVVM, but this is just example to see that ObservableCollection works
var btn = sender as Button;
(btn.DataContext as ViewModel).Books.Add(new Book() { Name = "Book" + DateTime.Now.Second });
}
}
public class ViewModel
{
public ViewModel()
{
this.Books = new ObservableCollection<Book>();
this.Books.Add(new Book() { Name = "Book 1" });
this.Books.Add(new Book() { Name = "Book 2" });
this.Books.Add(new Book() { Name = "Book 3" });
}
public ObservableCollection<Book> Books { get; private set; }
}
public class Book
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1698 次 |
| 最近记录: |