首先,讓Chimera
一個Dependency Property所以它可以參與綁定系統
public static readonly DependencyProperty ChimeraProperty =
DependencyProperty.Register("Chimera ", typeof(ChimeraViewModel),
typeof(ChimeraUserControl), new FrameworkPropertyMetadata(null));
public ChimeraViewModel Chimera
{
get { return (ChimeraViewModel)GetValue(ChimeraProperty); }
set { SetValue(ChimeraProperty, value); }
}
其次,你可以通過一個RelativeSource
或ElementName
結合
<UserControl x:Name="ChimeraViewRoot" ... >
<StackPanel>
<!-- ElementName Binding -->
<TextBlock Text="{Binding ElementName=ChimeraViewRoot, Path=Chimeria.Name}" />
<!-- RelativeSource Binding -->
<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ChimeraView}}, Path=Chimeria.Name}" />
</StackPanel>
</UserControl>
引用您的
Chimeria
財產
你也可以設置0控件你UserControl
到Chimera
屬性裏面,讓您綁定語法清潔
<UserControl x:Name="ChimeraViewRoot" ... >
<StackPanel DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ChimeraView}}, Path=Chimeria}" >
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Description}" />
</StackPanel>
</UserControl>
我經常因爲這個值應該是從任何使用UserControl
通過不建議你UserControl
定義UserControl.DataContext
。設置在UserControl
內可能會導致混淆,當您試圖找出爲什麼某個特定的UserControl
不適用於預期的DataContext
時。
個人,當我創建一個應該去一個特定UserControl
一個ViewModel
,我希望設置DataTemplate
的應用程序,這樣的所有實例我ViewModel
拿得出與我的自定義UserControl
。這意味着,我假設UserControl.DataContext
將永遠是一個特定ViewModel
型
<DataTemplate DataType="{x:Type local:ChimeriaViewModel}">
<local:ChimeriaView /> <!-- DataContext will always be ChimeriaViewModel -->
</DataTemplate>
這將使用ChimeriaView
隱含每當視覺樹遇到ChimeriaViewMmodel
類型的對象。
例如,下面將呈現一個充滿ChimeriaView
對象
<ItemsControl ItemsSource="{Binding MyListOfChimeriaViewModels}" />
或顯示一個對象,我通常會使用的東西就像一個ContentControl
<!-- Will get drawn using ChimeriaView due to DataTemplate defined above -->
<ContentControl Content="{Binding MyChimeriaViewModelProperty}" />
此外,通過了解StackPanel
爲ChimeriaView
將成爲ChimeriaViewModel
類型的對象,我會擺脫DependencyProperty
共
<UserControl>
<StackPanel>
<!-- I know the DataContext is ChimeriaViewModel -->
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Description}" />
</StackPanel>
</UserControl>
從upvotes我得到我想這是一個真正的問題缺乏文件綁定。 – 2012-02-27 04:27:38
將xaml或代碼添加到您試圖執行所需內容的地方。它會更精確地顯示問題。 – 2012-02-27 09:32:01
後面的代碼就在這裏。稍後我會添加一塊XAML,儘管這不是IMO必需的,因爲我無法在那裏做任何事情。 – 2012-02-27 13:07:30