所以我在ComboBox中遇到SelectedItem
的小问题。
首先,我有一个模板用于ComboBox中的项目。因为我想为每个项目显示一个Icon和一个文本。
<DataTemplate x:Key="PersonsComboBox" DataType="asi:Person">
<WrapPanel>
<StackPanel Orientation="Horizontal">
<Image Width="40" Height="30" Source="{Binding Path=Symbol, Converter={StaticResource ImageConverter}}" />
<vw:Label Content="{Binding Name}" />
</StackPanel>
</WrapPanel>
</DataTemplate>
如您所见,此模板来自DataType Person
。
现在,我在另一个DataTemplate中使用此ComboBox。 DataTemplate看起来像这样:
<DataTemplate x:Key="PersonsTemplate" DataType="asi:Person">
<vw:ComboBox ItemTemplate="{StaticResource PersonsComboBox}" ItemsSource="{Binding AllPersons}" SelectedItem="???">
</DataTemplate>
属性AllPersons
是在公司工作的所有人员的列表。一个人有两个属性Name
和Symbol
(他们脸部的形象)。
AllPersons = new List<Person>
{
new Person { Name = "Jenny", Symbol = new Image.FromFile("Path") },
new Person { Name = "Mike", Symbol = new Image.FromFile("Path") }
new Person { Name = "Peter", Symbol = new Image.FromFile("Path") }
new Person { Name = "Nicole", Symbol = new Image.FromFile("Path") }
}
人:
public class Person
{
public string Name { get; set; }
public Image Symbol { get; set; }
}
最后我想显示很多ComboBoxes(使用ItemsControl)。每个ComboBox代表一个人。但我希望能够转换人员。 SelectedItem应该是SelectedDepartment.Persons
中的项目<StackPanel>
<ItemsControl ItemsSource="{Binding SelectedDepartment.Persons, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemTemplateSelector="{StaticResource PersonTemplateSelector}"/>
</StackPanel>
所以基本上我想要的是将我的ComboBox的SelectedItem设置为本身所以SelectedItem =“{Binding}”。但ItemSource是另一个。它们只有相同的DataType
答案 0 :(得分:0)
我建议您重新设计数据,以便在单独的视图模型中支持人员选择。
class MultiplePeopleContainer
{
public ICollection<Person> AllPersons { get; } // list of all selectable person objects
public ICollection<PersonContainer> DisplayedPersons { get; } // list of displayed persons where the actual person can be selected from combobox
}
class PersonContainer
{
public Person SelectedPerson { get; set; } // person whos properties should be displayed
}
class Person
{
public string Name { get; set; }
public Image Symbol { get; set; }
}
然后XAML变得更容易
<!-- same as in question-->
<DataTemplate x:Key="PersonsComboBox" DataType="asi:Person">
<WrapPanel>
<StackPanel Orientation="Horizontal">
<Image Width="40" Height="30" Source="{Binding Path=Symbol, Converter={StaticResource ImageConverter}}" />
<vw:Label Content="{Binding Name}" />
</StackPanel>
</WrapPanel>
</DataTemplate>
<!-- new -->
<DataTemplate DataType="asi:MultiplePeopleContainer">
<Grid>
<Grid.Resources>
<CollectionViewSource x:Key="SelectablePersons" Source="{Binding AllPersons}"/>
<DataTemplate DataType="asi:PersonContainer">
<vw:ComboBox ItemTemplate="{StaticResource PersonsComboBox}" ItemsSource="{Binding Source={StaticResource SelectablePersons}" SelectedItem="{Binding SelectedPerson}" />
</DataTemplate>
</Grid.Resources>
<ItemsControl ItemsSource="{Binding DisplayedPersons}"/>
</Grid>
</DataTemplate>
附注:<WrapPanel>
模板中的PersonsComboBox
并不真正有用