我想要將我的TabControl
的內容綁定到我的StepViewModel
的實例的ObservableCollection
步驟。如何將tabcontrol內容的datacontext綁定到observablecollection中的視圖模型的實例
我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中存在一個問題,因此它不像您期望的那樣綁定數據上下文。這在錯誤中顯示,該綁定嘗試在「StepViewModel」而不是「ProcessViewModel」上查找「SelectedStep」屬性。簡而言之,看看在控件中如何使用C1TabControl.SelectedItem屬性。 – ibebbs
'vmns:ProcessViewModel'不是可視化樹的一部分,所以你不能使用AncestorType來找到它。你可以用AncestorType做的事情是找到一個* control *,它的'DataContext'是'vmns:ProcessViewModel',它似乎是你的選項卡控件:'DataContext =「{Binding DataContext.SelectedStep,RelativeSource = {RelativeSource AncestorType = {x:類型C1:C1TabControl}}}「' –