我正在尝试将 my 的属性绑定DataContext
到SelectedItem
ComboBox 上,如下所示:
<ComboBox x:Name="ElementSelector"
ItemsSource="{Binding Source={StaticResource Elements}}"
DisplayMemberPath="ElementName"
SelectedItem="{Binding ValueElement, Mode=TwoWay}">
Elements资源在哪里CollectionViewSource
(不知道这是否重要)。
初始化所有内容后, 的属性ValueElement
设置DataContext
为CollectionViewSource
. SelectedItem
我想要的是以相反的方式对其进行初始化:如果不包含匹配项,我想将 ComboBox 设置为属性的值或 null 。
如何才能做到这一点?
编辑 - 附加信息:
ComboBox 是 DataTemplate 的一部分:
<DataTemplate x:Key="ReferenceTemplate"
DataType="viewModels:ElementMetaReferenceViewModel">
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<ResourceDictionary>
<views:ElementsForReferenceViewSource x:Key="Elements"
Source="{Binding DataContext.CurrentProject.Elements, ElementName=Root}"
ReferenceToFilterFor="{Binding}"/>
</ResourceDictionary>
</StackPanel.Resources>
<TextBlock Text="{Binding PropertyName}"/>
<ComboBox x:Name="ElementSelector"
ItemsSource="{Binding Source={StaticResource Elements}}"
DisplayMemberPath="ElementName"
SelectedItem=""{Binding ValueElement, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
ElementsForReferenceViewSource
简单地派生CollectionViewSource
并实现了用于过滤的附加 DependencyProperty 。
中的DataContext
项目CollectionViewSource
如下所示:
public class ElementMetaReferenceViewModel : ViewModelBase<ElementMetaReference, ElementMetaReferenceContext>
{
...
private ElementMetaViewModel _valueElement;
public ElementMetaViewModel ValueElement
{
get { return _valueElement; }
set
{
if (value == null) return;
_valueElement = value;
Model.TargetElement = value.Model;
}
}
...
}