绑定到列表框SelectedItem

本文关键字:SelectedItem 列表 绑定 | 更新日期: 2023-09-27 18:08:44

我有一个窗口,左侧是ListBox,右侧是TextBox。文本框绑定到列表框的选定项。文本框有一个SaveContentCommand。

如果您在文本框中留下Enter或Tab,则SaveContentCommand执行正确。但是,如果我使用鼠标选择其他的东西,selecteditem被改变,然后SaveContentCommand被执行。这意味着SaveContentCommand在另一个项目上使用。

我试图破解像RenameLastSelectedItem()这样的东西但是有正确的/更好的方法吗?

我的列表:

<customControls:MyListBox x:Name="UserListBox"
                          Grid.Row="1" 
                          Grid.Column="0" 
                          ItemsSource="{Binding Users}" 
                          SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                          VerticalAlignment="Top" 
                          Style="{DynamicResource MyListBoxStyle}" 
                          ItemContainerStyle="{DynamicResource MyListBoxItemUserListStyle}">

我的文本框:

<customControls:MyTextBox   x:Uid="textBoxName"
                            x:Name="textBoxNameOfSelectedItems"
                            Text="{Binding SelectedItem.Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=true, Mode=TwoWay}"
                            focus:FocusExtension.IsFocused="{Binding SelectedItem.IsNameFocused, Mode=TwoWay}"
                            focus:FocusExtension.EnableSelection="True"
                            UseKeyboardBinding="true"
                            Style="{DynamicResource MyTextBoxStyle}"
                            SaveContentCommand="{Binding SelectedItem.UpdateCommand}"

绑定到列表框SelectedItem

在SelectedItem的set方法中,保存前一项。当用鼠标选择新项时所选项发生变化时,此代码将运行。

SelectedItem
{get { return _selectedItem;}  
 set 
 {
  //null check
  SaveContent(_selectedItem);
  _selectedItem = value;
 }
}