显示ListBox SelectedItem

时间:2014-01-06 20:28:44

标签: .net wpf

我刚刚阅读this question,但我的实施存在问题。

MainWindow包含一些包含一些数据的列表框。在列表框内的选定项目上,我想在状态栏上的文本块中显示同一窗口所选数据是DataOne,其中DataOne表示Name属性。

MainWindow.xaml

<ListBox Name="listBoxData"              
         ItemsSource="{Binding MyListBoxData}" SelectedItem="{Binding SelectedData}" />

内部状态栏元素

<TextBlock Text="{Binding SelectedData.Name, StringFormat='Selected data is: {0}'}">  

MainWindowViewModel

public MyData SelectedData {get; set;}

P.S。只是为了澄清数据在listbox中正确显示,DataContext在ViewModel构造函数中设置。

2 个答案:

答案 0 :(得分:1)

看起来你没有在viewmodel中实现INotifyPropertyChanged接口?

您必须这样做,以便绑定系统知道何时更新TextBlock中的值。

所以实现接口,然后在SelectedData属性的setter中引发PropertyChanged事件:

private MyData _selectedData;
public MyData SelectedData
{
    get { return _selectedData; }
    set
    {
        _selectedData = value;
        RaisePropertyChanged("SelectedData");
    }
}

private void RaisePropertyChanged(string propertyName)
{
    var handler = PropertyChanged;

    if (handler != null)
        handler(this, new PropertyChangedEventArgs(propertyName));
}

public event PropertyChangedEventHandler PropertyChanged;

答案 1 :(得分:1)

您应该可以直接绑定到MyListBoxData集合中的所选项目,如下所示:

<TextBlock Text="{Binding MyListBoxData/Name, StringFormat='Selected data is: {0}'}">

如果它一开始不起作用,您可能需要将IsSynchronizedWithCurrentItem上的ListBox属性设置为True

<ListBox Name="listBoxData" IsSynchronizedWithCurrentItem="True"             
    ItemsSource="{Binding MyListBoxData}" />