MVVM,WPF:如何在组合框中选择一个项目
似乎还没有人找到一种方法来将Selectedobject设置为SelectedItem =“Binding Property”。MVVM,WPF:如何在组合框中选择一个项目
解决方案是在组合框itemssource中的ViewModel对象中使用IsSelected属性?
我们对绑定的组合框成功的方法在下列...
<ComboBox
ItemsSource="{Binding Path=AllItems}"
SelectedItem={Binding Path=CurrentItem, Mode=TwoWay} />
<TextBlock Text="{Binding Path=CurrentItem, Mode=TwoWay}" />
class public ItemListViewModel
{
public ObservableCollection<Item> AllItems {get; set;}
private Item _currentItem;
public Item CurrentItem
{
get { return _currentItem; }
set
{
if (_currentItem == value) return;
_currentItem = value;
RaisePropertyChanged("CurrentItem");
}
}
}
不确定为什么你不能在无法看到你的代码的情况下将数据绑定到ComboBox上的SelectedItem。以下向您展示了如何使用一个CollectionView,它具有内置的组合框支持的当前项目管理。 CollectionView有一个CurrentItem get属性,您可以使用它来获取当前选定的属性。
XAML:
<Window x:Class="CBTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<ComboBox
ItemsSource="{Binding Path=Names}"
IsSynchronizedWithCurrentItem="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Text="{Binding Path=Names.CurrentItem}" />
</StackPanel>
</Window>
后面的代码:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
namespace CBTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = new VM();
}
}
public class VM
{
public VM()
{
_namesModel.Add("Bob");
_namesModel.Add("Joe");
_namesModel.Add("Sally");
_namesModel.Add("Lucy");
Names = new CollectionView(_namesModel);
// Set currently selected item to Sally.
Names.MoveCurrentTo("Sally");
}
public CollectionView Names { get; private set; }
private List<string> _namesModel = new List<string>();
}
}
” ......不知道为什么你无法将数据绑定到ComboBox上的SelectedItem而不看到您的代码....“ 做一个容易谷歌它非常广泛的问题。 CollectionView总是在我的情况下,此外,我可以也不会踢我的ObservableCollection
CollectionView可以是ObservableCollection的视图,因此需要踢任何东西。你是什么意思,CollectionView是总开销?您是否在谈论CollectionView在Current之外提供的其他功能,如过滤,分组和排序?我仍然不知道在combobox上绑定selecteditem的问题是什么。 – 2010-05-18 20:51:57
我不需要一个CollectionView多数民众赞成它;-)如果我想排序这是控制的工作,在我的情况下DataGrid具有此功能。 CollectionView对于不对列标题进行排序的列表视图是好的。 – msfanboy 2010-05-19 19:09:46
这很奇怪。我可以发誓,我没有,因为我的一些博客了解它到底是什么,你之前提出... 现在我又试了一次,它的工作:P 在我这个,如果有人有兴趣XD 帮助与此同时//将新创建的Schoolclass设置为UI控件中的选定索引 .. SelectedSchoolclassIndex =(Schoolclasses.Count!= 0)? Schoolclasses.Count - 1:0; – msfanboy 2010-05-22 10:04:53
刚刚有这个问题。我有两个独立的集合,并且忘记了equals操作符,所以当前项目是从另一个集合中挑选出来的,而不是从我从XAML绑定的集合中挑选出来的。所以实施等于是固定的问题。但是从同一个集合中选择也解决了这个问题 – 2011-09-07 11:04:35