Ich bin ein wenig verwirrt darüber, wie die Datenbindung funktioniert, wenn Sie diese Typen verwenden.CompositeCollection/CollectionViewSource Verwirrung
Ich habe gelesen, dass Sie nicht tun können, die folgenden
public partial class Window1 : Window
{
public ObservableCollection<string> Items { get; private set; }
public Window1()
{
Items = new ObservableCollection<string>() { "A", "B", "C" };
DataContext = this;
InitializeComponent();
}
}
<Window x:Class="WpfApplication25.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ComboBox>
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Items}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</Window>
weil Composite keine Ahnung von Datacontext hat und so etwas in der es mit einer Bindung der Source-Eigenschaft gesetzt hat. Wie zum Beispiel:
<Window x:Class="WpfApplication25.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<CollectionViewSource x:Key="list" Source="{Binding Items}"/>
</Window.Resources>
<ComboBox Name="k">
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource list}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</Window>
Aber wie funktioniert das? es setzt die Quelle auf etwas, aber das etwas, in diesem Fall verwendet eine CollectionViewSource einen Datenkontext (da er nicht explizit eine Quelle einstellt).
Also, weil "list" in den Ressourcen von Window deklariert ist, heißt das, dass es Windows DataContext bekommt? In welchem Fall funktioniert das Folgende auch nicht?
<Window x:Class="WpfApplication25.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<Button x:Key="menu" Content="{Binding Items.Count}"/>
</Window.Resources>
<ComboBox Name="k">
<ComboBox.ItemsSource>
<CompositeCollection>
<ContentPresenter Content="{Binding Source={StaticResource menu}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</Window>
Warum ist dies nicht immer upvotes? upvote es! – Tuco