c# - net - So erhalten Sie bestimmte Eigenschaften aus dem in ListBox ausgewählten Element




vb.net checkedlistbox checked items (2)

Ich habe folgendes:

<ListBox SelectedItem="{Binding SelectedItem}"
ItemsSource="{Binding items}" DisplayMemberPath="s"/>

<TextBlock Text="{Binding SelectedItem.s}"/>

Dies ist die Definition von SelectedItem

public MemEntity SelectedItem {get; set;}

MemEntity ist eine Klasse mit

public String s {get; get;}.

Grundsätzlich möchte ich s des ausgewählten Elements im TextBlock (gleiche Eigenschaft wie in ListBox ). Das funktioniert nicht, also was mache ich falsch?


Es gibt mehrere Möglichkeiten, dies zu tun. Eine Option wurde bereits in einer anderen Antwort bereitgestellt, die sich darauf konzentriert, die gewünschte Funktionalität durch Bindung an ein Ansichtselement zu erreichen. Hier ist eine andere Option.

Die Ansicht ist sich nicht bewusst, dass das ausgewählte Element geändert wurde. schauen Sie sich INotifyPropertyChanged

Sie können ein Basis-ViewModel erstellen, um die wiederholte Funktionalität zu kapseln

public abstract class ViewModelBase : INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Lassen Sie die Ansichtsmodelle von dieser Basisklasse erben, damit die Ansicht beim Binden von Änderungen Kenntnis erhält.

public class ItemsViewModel : ViewModelBase {

    public ItemsViewModel() {
        items = new ObservableCollection<MemEntity>();
    }

    private MemEntity selectedItem;
    public MemEntity SelectedItem {
        get { return selectedItem; }
        set {
            if (selectedItem != value) {
                selectedItem = value;
                OnPropertyChanged(); //this will raise the property changed event.
            }
        }
    }

    public ObservableCollection<MemEntity> items { get; set; }
}

Die Ansicht wird nun angezeigt, wenn sich die SelectedItem Eigenschaft ändert, und aktualisiert die Ansicht entsprechend.


Versuche dies,

<TextBlock ... Text="{Binding ElementName=items, Path=SelectedItem.s}" />

Fügen Sie dann Ihrer ListBox einen Namen hinzu,

  <ListBox x:Name="items" SelectedItem="{Binding SelectedItem}"
        ItemsSource="{Binding items}" DisplayMemberPath="s"/>






listbox