我想从itemssource预先选择一个组合框,(选择一个现有项目)。这是我的类模型和xaml语法。
Class ViewModelSample
{
Public List<Animal> Animals;
Public LivingBeing LivingBeingInst {get; set;}
}
Class LivingBeing
{
Public Animal AnimalInst {get; set;}
}
--------------------------------------------------------------------
<Combobox ItemsSource={Binding Animals} SelectedItem={Binding LivingBeingInst.AnimalInst}
DisplayMemeber = SomePropertyInAnimal>
--------------------------------------------------------------------------
但这不起作用。我想要的是,当xaml出现时,我需要使用SelectedItem中给出的项目预先选择组合框。
非常感谢任何帮助。谢谢,玛尼
答案 0 :(得分:3)
感谢您的投入,我已经解决了这个问题。我已经实现了INotifyPropertyChanged,但这不是问题。
组合框的SelectedItem应该是ItemsSource中给出的Collection之一。虽然,AnimalInst属于Animal类型,但它不是te ItemsSource中的对象之一。所以我所做的是,声明一个SelectedAnimal属性,将其绑定到SelectedItem。 'SelectedAnimal'将从比较AnimalInst.Name的'Animals'集合返回相同的实例。一个例子如下。 (时间表是集合)。
private ISchedule _selectedSchedule;
public ISchedule SelectedSchedule
{
get
{
if(_selectedSchedule != null)
{
var schedule = this.Schedules.Where(item => item.GlobalCodesId == _selectedSchedule.GlobalCodesId).FirstOrDefault();
return schedule;
}
return _selectedSchedule;
}
set
{
_selectedSchedule = value;
base.NotifyPropertyChanged("SelectedSchedule");
}
}
答案 1 :(得分:2)
通常情况下,您的ViewModel和SelectedAnimal属性都有一个List(在您的情况下为Animal),在您的情况下,似乎LivingBeingInst属性应该是列表中的选定动物。
要使这样的东西起作用,你可能需要编写一些代码来将LivingBeing转换为动物并通过ValueConverter返回。
但是,我认为最好的办法是创建一个SelectedAnimal属性来存储选定的Animal。
在您的构造函数中,或者您最初填充动物列表的任何位置,您可以将SelectedAnimal设置为列表中的第一个元素。
答案 2 :(得分:1)
SelectedItem
的初始值需要是作为ComboBox ItemsSource
成员的对象的实例。在此示例中,LivingBeingInst.AnimalInst
需要位于Animals
集合中。
你还可以拥有一个属性,在LivingBeingInst.AnimalInst
集合中找到Animals
的相应项目,就像Everything Matters的答案一样。
答案 3 :(得分:0)
您没有在这些类中实施更改通知。因此,除非您已经在相应类的构造函数中填充了所有这些属性,否则绑定无法知道您已经这样做了。
至少,这是我对您发布的非工作,不可编译,非真实代码的猜测。一般来说,如果你发布实际代码,你会得到更多有用的答案,特别是如果你花时间实现现有代码的最小的最小子集,仍然表现出你试图解决的问题。 (除此之外,当你这样做时,你可能会自己找到答案。)