내 TabControl
의 콘텐츠를 내 StepViewModel
의 인스턴스로 바인딩하려는 경우 ObservableCollection
단계. tabcontrol 콘텐츠의 datacontext를 observablecollection의 viewmodel 인스턴스에 바인딩하는 방법
pubic class ProcessViewModel : ViewModelBase
{
public ObservableCollection<StepViewModel> Steps
{
get { return _steps; }
set { _steps = value; OnPropertyChanged("Steps"); }
}
public StepViewModel SelectedStep
{
// like above...
}
}
내 StepViewModel (의 DataContext는 ProcessVM의 단계에서 StepVMs해야한다) :
public class StepViewModel : ViewModelBase
{
public string Name { get {...} set {...} }
public object Media { get {...} set {...} }
//...
}
내에서 TabControl (의 DataContext가 ProcessViewModel입니다) :
<C1:C1TabControl
ItemsSource="{Binding Steps}"
SelectedItem="{Binding SelectedStep}"
SelectionChanged="{tcSteps_OnSelectionChanged">
<C1:C1TabControl.ContentTemplate>
<DataTemplate>
<local:StepView
DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vmns:ProcessViewModel}}, Path=SelectedStep}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
</local:StepView>
</DataTemplate>
</C1:C1TabControl.ContentTemplate>
</C1:C1TabControl>
컴파일러는 다음 출력 메시지를 전달합니다.
"System.Windows.Data Error: 40 : BindingExpression path error: 'SelectedStep' property not found on 'object' ''StepViewModel' (HashCode=32952144)'. BindingExpression:Path=SelectedStep; DataItem='StepViewModel' (HashCode=32952144); target element is 'StepView' (Name='StepView'); target property is 'DataContext' (type 'Object')"
아무도 내가 해결할 수있는 방법을 알고 있습니까? 감사합니다.
StepViewModel에 SelectedStep이라는 속성이 정의되어 있습니까? – Versatile
C1TabControl에 문제가있어 예상대로 데이터 컨텍스트를 바인딩하지 않는 것처럼 보입니다. 이것은 바인딩이 "ProcessViewModel"대신 "StepViewModel"에서 "SelectedStep"속성을 찾으려고한다는 오류에서 볼 수 있습니다. 즉,''''C1TabControl.SelectedItem''' 속성이 컨트롤 내에서 어떻게 사용되는지보십시오. – ibebbs
'vmns : ProcessViewModel'은 비주얼 트리의 일부가 아니므로 AncestorType을 사용하여 찾을 수 없습니다. AncestorType으로 할 수있는 것은'DataContext'가'vmns : ProcessViewModel' 인 탭 컨트롤 인 * control *을 찾는 것입니다 :'DataContext = "{DataContext.SelectedStep, RelativeSource = {RelativeSource AncestorType = {x : C1 타입 : C1TabControl}} "" –