2017-05-14 12 views
1

で選択した項目から特定のプロパティを取得する:どのように私は、次のしているのListBox

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

を含むクラスであります、私は選択されたアイテムのsをTextBlock(sam例えば、ListBoxに示されるような特性)。これはうまくいかないので、何が間違っているのですか?

+1

選択したアイテムが変更されたことを認識できません。 'INotifyPropertyChanged'を参照してください。 – Nkosi

+0

私は参照してください。私はインターフェイスを実装し、イベントを発生させます。 – Pelle

+0

MVVMを適用していますか? – Nkosi

答えて

2

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

これを行うには、複数の方法があります

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

MVVMを使用している場合NotifyPropertyChangedの必要はありません。私はこれを動作させることができなかったので(またはおそらく更新)。 – Pelle

+0

あなたはバインディングのためにそれを必要とします – Sajeetharan

2

、としてあなたのListBoxに名前を追加し、これを試してみてください。ビュー要素にバインドすることによって所望の機能を達成することに焦点を当てた別の解決策として、既に1つの選択肢が提供されている。もう一つの選択肢があります。

選択した項目が変更されたことを認識できません。 INotifyPropertyChanged

を使用してに見てあなたが繰り返し機能

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

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

をカプセル化するために、ベースのViewModelを作成することができるモデルが結合時にビューが変更を意識するようにするために、この基本クラスから継承するビューを持っています。

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プロパティの変更承知しているであろうし、それに応じてビューを更新します。

+0

実際には、私は何か更新を得ることができません。私は前の答えと同様にINotifyPropertyChangedのようなバインディングを追加しましたが。 – Pelle

関連する問題