2009-07-19 57 views
0

我有一個XAML代碼,它應該在TabControl中加載我的UserControlXAML不會從ViewModel對象加載UserControl

如果我把這個XAML代碼:

<DataTemplate x:Key="WorkspacesTemplate"> 
    <TabControl 
    IsSynchronizedWithCurrentItem="True" 
    ItemsSource="{Binding Path=Gui}" 
    ItemTemplate="{StaticResource ClosableTabItemTemplate}" 
    Margin="4" 
    /> 
</DataTemplate> 

我是絕對沒有出現在Windows(GUI屬性是視圖模型類中,並返回一個用戶控件)。

但如果我把他的XAML代碼,而不是前一個:

<DataTemplate x:Key="WorkspacesTemplate"> 
    <TabControl 
    IsSynchronizedWithCurrentItem="True" 
    ItemsSource="{Binding}" 
    ItemTemplate="{StaticResource ClosableTabItemTemplate}" 
    Margin="4" 
    /> 
</DataTemplate> 

我視圖模型加載對象:

alt text http://clip2net.com/clip/m12122/1248018108-clip-3kb.png

這裏是一塊的TextBoxInputViewModel的代碼具有應該綁定以獲得Visual(用戶控制)的屬性Gui:

private UserControl gui; 

    public UserControl Gui 
    { 
     get 
     { 
      if (this.gui == null) 
      { 
       this.gui = new SimpleTextBoxInputControl();//Xaml User Control 
       this.gui.DataContext = this;//Bind the Visual and ViewModel 
      } 
      return this.gui; 
     } 
    } 

任何想法如何我可以得到UserControl而不是此對象引用文本?

+0

您是否嘗試在輸出窗口中查看ItemsSource =「{Binding Path = Gui}」?輸出窗口顯示綁定錯誤,該消息應該有幫助 – 2009-07-19 18:24:19

+0

謝謝注意輸出窗口。我看到「System.Windows.Data錯誤:32:ObjectDataProvider需要一個ObjectType或ObjectInstance。」但不能看出它是否與此綁定有關。 – 2009-07-19 20:25:33

+0

我不認爲它與那個綁定的原因有關,如果我把它綁定到它自己,它仍然有這個錯誤。 – 2009-07-19 23:30:43

回答

2

問題是ItemSource是一個集合,當你將它綁定到一個只有一個值的屬性時。您看到的Output窗口中的錯誤可能與此有關。

直接從視圖模型中返回UserControl,最好返回另一個表示該選項卡內容的視圖模型,並使用模板顯示該內容。如果您需要它比選擇基於查看模型的Type的模板更具動態性,請查看設置TabControl.ContentTemplateSelector。這需要設置爲派生自DataTemplateSelector的類。您可以使用此類根據綁定到該選項卡的對象來決定要加載哪個模板。

1

你應該在你App.xaml文件爲您的視圖模型模板這樣

<DataTemplate DataType="{x:Type simpleModel:TextBoxInputViewModel}"> 
     <myView:TextBoxInputControl /> 
    </DataTemplate> 

其中simpleModel是TextBoxInputViewModel的命名空間,TextBoxInputControl是要顯示的用戶控制和MyView的是命名空間該用戶控件。