2009-06-08 61 views
5

在我看來,我有這樣的:如何將一個StackPanel綁定到我的ViewModel?

<TextBlock Text="{Binding Title}"/> 

結合到我的視圖模型的Title屬性和這很簡單和行之有效的

private string _title; 
public string Title 
{ 
    get 
    { 
     return _title; 
    } 

    set 
    { 
     _title = value; 
     OnPropertyChanged("Title"); 
    } 
} 

但是我的ViewModel也有物業「FormFields 「這是一個包含多個其他UserControl的StackPanel:

private StackPanel _formFields; 
public StackPanel FormFields 
{ 
    get 
    { 
     return _formFields; 
    } 

    set 
    { 
     _formFields = value; 
     OnPropertyChanged("FormFields"); 
    } 
} 

如何從我的視角綁定這個?

在ASP.NET中有一個PlaceHolder元素,我正在尋找具有相同功能的東西,例如

僞代碼:

<PlaceHolder Content="{Binding FormFields}"/> 

回答

18

首先,不要。而不是從你的VM口述UI,你應該口述數據(模型)。換句話說,物業類型應該是ObservableCollection<FormField>。那麼你的觀點將結合如下:

<ItemsControl ItemsSource="{Binding FormFields}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel/> 
     <ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

說了這麼多,你可以使用一個ContentPresenterStackPanel並把它貼在視覺樹:

<ContentPresenter Content="{Binding FormFields}"/> 
+0

嗯,好吧,我不能讓它與ItemsSource一起工作,因此發現你可以讓一個ViewModel屬性成爲一個XAML元素,這似乎是一個非常有用的模式,將不得不重新考慮這一點,但ContentPresenter現在運行良好,謝謝。 – 2009-06-08 11:37:01

0

您是否嘗試過使用Border或只是一個普通的Grid

<Border Content="{Binding FormFields}" /> 

不過,我在質疑設計。表單字段應該存在於視圖中,視圖應該在基於視圖模型類型實例化的數據模板中指定。我不會親自做你在做代碼的事情。

乾杯。

相關問題