私のTabControl
の内容をのインスタンスにバインドしたい場合は、ObservableCollection
の手順です。tabcontrolコンテンツのdatacontextをobservablecollection内のviewmodelのインスタンスにバインドする方法
マイProcessViewModel:
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 =" {Binding DataContext.SelectedStep、RelativeSource = {RelativeSource AncestorType = {x:タイプC1:C1TabControl}}} "' –