SelectedItem属性未更新
相对较新的C#和MVVM,但我正在使用MVVM Light Toolkit制作WP7应用程序。 我遇到了ListBox中属性的双向绑定问题。 我有一个ObservableCollection的客户端,我试图选择一个单独的客户端(点击时会将我带到一个新的ViewModel)。
当我点击一个选定的项目时,它应该更新SelectedItem属性并将该值设置为单击的客户端。 然而,点击它甚至没有达到setter(我用*标记了断点)。 有谁知道我错了什么地方或有更好的建议解决方案吗? 我一直在拖这个地方好几个小时!
XAML MarkUp:
<ListBox SelectedItem="{Binding SelectedItem, Mode=TwoWay}" ItemsSource="{Binding ClientList, Mode=TwoWay}" x:Name="FirstListBox" Margin="0,0,-12,0" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<Button CommandParameter="{Binding}">
<helper:BindingHelper.Binding>
<helper:RelativeSourceBinding Path="ShowClientCommand" TargetProperty="Command"
RelativeMode="ParentDataContext" />
</helper:BindingHelper.Binding>
<Button.Template>
<ControlTemplate>
<TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ViewModel属性:
public ObservableCollection<Client> ClientList
{
get
{
return _clientList;
}
set
{
_clientList = value;
RaisePropertyChanged("ClientList");
}
}
public Client SelectedItem
{
get
{
return _selectedItem;
}
set
{
* _selectedItem = value;
RaisePropertyChanged("SelectedItem");
}
}
难道是因为你没有注册selection_changed事件,它不会改变它的属性吗?
我不完全确定为什么这样做不起作用,但是这里有一个我经常使用的模板,并且推荐使用这个模板。
为您的列表框注册SelectionChanged事件,如下所示:
<ListBox SelectionChanged="FirstListBox_SelectionChanged" ItemsSource="{Binding ClientList, Mode=TwoWay}" x:Name="FirstListBox" Margin="0,0,-12,0" ScrollViewer.VerticalScrollBarVisibility="Auto">
然后在相应的.cs文件中,有一个如下所示的处理程序:
private void FirstListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// If selected index is -1 (no selection) do nothing
if (FirstListBox.SelectedIndex == -1)
return;
// get the client that's selected
Client client = (Client) FirstListBox.selectedItem;
//... do stuff with the client ....
// reset the index (note this will fire this event again, but
// it'll automatically return because of the first line
FirstListBox.SelectedIndex = -1;
}
链接地址: http://www.djcxy.com/p/44675.html
上一篇: SelectedItem property not updating
下一篇: MVVM: Bind ListView.SelectedItem.Property to VM Property