c# - 如何從列錶框中選擇的項目獲取特定的屬性




wpf listview (2)

嘗試這個,

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

然後添加一個名字到你的ListBox中,

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

我有以下幾點:

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

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

這是SelectedItem定義

public MemEntity SelectedItem {get; set;}

MemEntity是一個包含的類

public String s {get; get;}.

基本上,我希望在TextBlock顯示所選項目(與ListBox顯示的屬性相同)。 這不行,所以我做錯了什麼?


有多種方法可以做到這一點。 在另一個答案中已經提供了一個選項,重點是通過綁定到視圖元素來實現所需的功能。 這是另一種選擇。

該視圖不知道所選項目已更改。 看看使用INotifyPropertyChanged

您可以創建一個基本的ViewModel來封裝重複的功能

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

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

讓視圖模型從這個基類繼承,以便視圖在綁定時知道更改。

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; }
}

SelectedItem屬性發生變化時,該視圖將會知道,並相應地更新視圖。





listbox