Wpf 更改绑定时始终从列表框中选择第一项
有一个列表框,它的ItemsSource绑定到一个集合, 当绑定被更改时,我们需要始终选择第一项,例如,在第一个ListBox中有3项,第二项由用户从ListBox中选择,在绑定被更改之后,ListBox有1项,但第二项仍然被选中。(第二项是emty,但未隐藏)Wpf 更改绑定时始终从列表框中选择第一项,wpf,xaml,mvvm,Wpf,Xaml,Mvvm,有一个列表框,它的ItemsSource绑定到一个集合, 当绑定被更改时,我们需要始终选择第一项,例如,在第一个ListBox中有3项,第二项由用户从ListBox中选择,在绑定被更改之后,ListBox有1项,但第二项仍然被选中。(第二项是emty,但未隐藏) 有人能帮助解决这个问题吗?首先为更改绑定创建一个事件,并在“更改事件”功能中设置索引 private void AddEventHandler() { myListBox.BindingContextChanged += ne
有人能帮助解决这个问题吗?首先为更改绑定创建一个事件,并在“更改事件”功能中设置索引
private void AddEventHandler()
{
myListBox.BindingContextChanged += new EventHandler(BindingContext_Changed);
}
private void BindingContext_Changed(object sender, EventArgs e)
{
myListBox.SelectedIndex = 0;
}
首先,在xaml中添加ListBoxItem有什么具体原因吗。
如果没有,请使用observable集合绑定到listbox的Itemsource属性 还将ListBox的selected item属性绑定到viewmodel的属性。
更改集合后,将viewmodel的“绑定选定项”属性设置为第一项 同时设置,
IsSynchronizedWithCurrentItem=“True”在xaml的列表框中
这应该管用 您正在静态地在xaml中添加项。请在视图模型中创建集合属性,将其绑定到items源,并在视图模型中绑定listbox的SelectedItem属性,如下所示:
<ListBox ItemsSource="{Binding ItemCollection}"
SelectedItem="{Binding SelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<!-- bind to item properties here -->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
每当设置ItemCollection属性时,视图模型也可以设置其SelectedItem属性:
public class Item { ... }
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private IEnumerable<Item> itemCollection;
public IEnumerable<Item> ItemCollection
{
get { return itemCollection; }
set
{
itemCollection = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(ItemCollection)));
SelectedItem = itemCollection.FirstOrDefault(); // here
}
}
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(SelectedItem)));
}
}
}
公共类项{…}
公共类视图模型:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
私人IEnumerable itemCollection;
公共IEnumerable ItemCollection
{
获取{return itemCollection;}
设置
{
itemCollection=值;
PropertyChanged?调用(此,
新属性ChangedEventArgs(名称(ItemCollection));
SelectedItem=itemCollection.FirstOrDefault();//此处
}
}
私有项目selectedItem;
公共项目选择项
{
获取{return selectedItem;}
设置
{
选择editem=值;
PropertyChanged?调用(此,
新属性ChangedEventArgs(名称(SelectedItem));
}
}
}
您可以向我们展示一些代码吗?您正在静态地在xaml中添加项。请在视图模型中创建集合属性,将其绑定到items源,并在视图模型中绑定listbox的SelectedItem属性,并在每次绑定更改时将其更新为collection.First()。只要不绑定项源,静态添加的项将始终存在。@Raviraj Palvankar,太好了,非常感谢,问题是关于WPF,而不是WinForms。除此之外,SelectedIndex=1
将选择第二项。
public class Item { ... }
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private IEnumerable<Item> itemCollection;
public IEnumerable<Item> ItemCollection
{
get { return itemCollection; }
set
{
itemCollection = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(ItemCollection)));
SelectedItem = itemCollection.FirstOrDefault(); // here
}
}
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(SelectedItem)));
}
}
}