내 DataContext
의 속성을 결합하려고에 SelectedItem
이 같은 콤보 상자에 :바인딩 양방향이의 selectedItem합니다 : "잘못된 방법"동기화를 초기화
<ComboBox x:Name="ElementSelector"
ItemsSource="{Binding Source={StaticResource Elements}}"
DisplayMemberPath="ElementName"
SelectedItem="{Binding ValueElement, Mode=TwoWay}">
요소 자원이 CollectionViewSource
입니다 (모르겠다, 이것이 중요한지).
모든 것이 초기화되면 DataContext
의 ValueElement
속성이 CollectionViewSource
의 첫 번째 항목으로 설정됩니다. 내가 원하는 것은 다른 방법으로 초기화하는 것입니다. 일치하는 항목이 없으면 ComboBox의 SelectedItem
을 속성 값으로 설정하고 싶습니다.
어떻게이 작업을 수행 할 수 있습니까?
EDIT - 추가 정보 :
콤보 상자 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를 구현한다.
은 CollectionViewSource
에있는 항목의 DataContext
는 다음과 같습니다 : 사람들의
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;
}
}
...
}
저는 Elements의 구조와 ValueElement 정의가 귀하의 질문에 포함되어 유용하다고 생각합니다. – iltzortz
@iltzortz : 제 질문에 세부 사항을 추가했습니다. 모양을 가져 주셔서 감사합니다! – Marc