Ich muss binden, so dass der Inhalt eines Inhaltssteuerelements auf den SelectedValue der TreeView oder der ListBox festgelegt wird. Der SelectedValue, der zuletzt geändert wurde, sollte den Inhalt für das ContentControl bereitstellen.WPF- Gibt es eine Möglichkeit, an die SelectedValues einer TreeView und einer ListBox zu binden?
WPF- Gibt es eine Möglichkeit, an die SelectedValues einer TreeView und einer ListBox zu binden?
Antwort
Ich konnte dies mit dem folgenden Konzept arbeiten.
- Binden Sie das Inhaltssteuerelement an eine schreibgeschützte Eigenschaft "SelectedItem" (mit der privaten Eigenschaft _selectedItem).
- Binden Sie das ListBox.SelectedItem an eine Lese-/Schreibeigenschaft "SelectedItemLB".
- Legen Sie in dem SelectedItemLB-Setter den Wert von _selectedItem fest, und heben Sie das PropertyChanged-Ereignis für SelectedItem auf.
- Erstellen Sie einen Handler für VreeView.SelectedItemChanged, der den Wert von _selectedItem festlegt und das PropertyChanged-Ereignis für SelectedItem auslöst.
Hier ist mein vollständiger Code:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.items = new List<object>();
this.items.Add(new Car("Green"));
this.items.Add(new Car("Blue"));
this.items.Add(new Car("Red"));
this._selectedItem = this.items[0];
this.treeView1.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(treeView1_SelectedItemChanged);
this.DataContext = this;
}
void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
this._selectedItem = treeView1.SelectedItem;
PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));
}
private List<object> items;
public List<object> Items
{
get { return items; }
set { items = value; }
}
public object SelectedItemLB
{
get { return _selectedItem; }
set
{
_selectedItem = value;
if (this.PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));
}
}
}
private object _selectedItem;
public object SelectedItem
{
get { return _selectedItem; }
}
public event PropertyChangedEventHandler PropertyChanged;
}
Das XAML ist ziemlich einfach:
<StackPanel>
<ListBox Name="listBox1" ItemsSource="{Binding Path=Items}" SelectedItem="{Binding Path=SelectedItemLB, Mode=TwoWay}" ></ListBox>
<TreeView Name="treeView1" ItemsSource="{Binding Path=Items}">
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected}"></Setter>
</Style>
</TreeView.Resources>
</TreeView>
<ContentControl Content="{Binding Path=SelectedItem.Color}"></ContentControl>
</StackPanel>
Ich kann nicht einen Weg finden, das direkt zu tun. Es gibt jedoch mehrere einfache Lösungen.
A. Verwenden Sie Ereignisse setzen die Content
einfach einen gemeinsamen Handler zu den SelectedValueChanged
Ereignisse Ihres ItemsControl
s befestigen. Wenn einer von ihnen seine Auswahl ändert, setzt der Handler den Wert Content
auf das, was ausgewählt wurde. Ich denke, das ist am einfachsten.
B. Verwendung Intermediär Eigenschaften
Bind die SelectedValue
jedes ItemsControl
auf eine Eigenschaft. Setzen Sie auch Content
der Einrichtung der Eigenschaft auf value
. Dadurch können Sie Datenbindung anstelle von Ereignishandlern verwenden, aber Sie müssen immer noch Code-Behind schreiben, und es kostet Sie nicht viel. Natürlich, wenn Sie bereits für andere Zwecke an Eigenschaften gebunden sind, gibt es fast keine zusätzlichen Kosten (nur eine Zuweisung in jedem Setter), so dass diese Methode vorzuziehen sein könnte.
- 1. Binden einer WPF-Listbox an eine Combobox
- 2. WPF Binden einer ListBox an eine Enumeration, Anzeigen des Beschreibungsattributs
- 3. An DataGridView binden - Gibt es eine Möglichkeit, die Hintergrundfarbe einer Zelle zu "binden"?
- 4. Gibt es eine Möglichkeit, zu einer Liste von Doubles für die Bearbeitung in WPF zu binden?
- 5. Liste an eine ListBox in WPF binden
- 6. Gibt es eine Möglichkeit, an Keyboard.FocusedElement zu binden?
- 7. WPF: Sammlung mit Sammlung zu einer ListBox mit Gruppen binden
- 8. Jedes XML-Dokument an WPF TreeView binden
- 9. WPF: Binden TreeView
- 10. Gibt es in WPF eine Möglichkeit, an gleichgeordnete Eigenschaften zu binden?
- 11. Kann ich eine WPF-TreeView an einen einzelnen Stammknoten binden?
- 12. Gibt es eine Möglichkeit, alle Aktionen einer UIToolbar zu behandeln?
- 13. Gibt es eine Möglichkeit, die Geschwindigkeit einer ScrollView zu berechnen?
- 14. WPF-Zugriffskontrollen in einer DataTemplate einer ListBox
- 15. Gibt es eine Möglichkeit, die Pixellänge einer Zeichenfolge zu berechnen?
- 16. Gibt es eine Möglichkeit, die Rotation einer Videosphäre zu erreichen?
- 17. Gibt es eine Möglichkeit, WPF-Bindungsmarkierung zu und von einer Instanz der Bindungsklasse zu konvertieren?
- 18. Gibt es eine Möglichkeit, die Eigenschaften einer Struktur zu durchlaufen?
- 19. WPF ListBox mit einer ListBox - UI Virtualisierung und Scrolling
- 20. Gibt es eine Möglichkeit, Bindungen in WPF erneut zu verwenden?
- 21. wpf binden an Indexer
- 22. Der Versuch, die ItemsSource-Eigenschaft einer HierarchicalDataTemplate an eine CollectionViewSource zu binden (zum Gruppieren und Filtern)
- 23. Sortieren einer ListBox in WPF
- 24. die Ebene einer Treeview in WPF?
- 25. Wie binden Daten hierarchische Daten an WPF TreeView?
- 26. Verwenden einer ListBox In WPF
- 27. Gibt es eine Möglichkeit, WPF Routed Events zu sehen?
- 28. gibt es eine Möglichkeit, Parameter an eine Funktionsvariable in Python zu binden?
- 29. WPF-Bindung an Listbox selectedItem
- 30. WPF - Gibt es eine Möglichkeit, eine Bindung programmatisch auszuwerten?