我刚刚阅读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构造函数中设置。
答案 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}" />