まず第一に、それはバインディングシステムで
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); }
}
第二に参加することができChimera
Dependency Propertyを作る、あなたは
<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>
を結合
RelativeSource
か
ElementName
を通して、あなたの
Chimeria
プロパティを参照することができます
0を設定することもできますあなたの結合構文クリーナー
<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>
を作るためにChimera
プロパティへのごUserControl
内部統制のその値がUserControl
を使用しています何から渡されたことになっているので、私は通常、あなたのUserControl
でUserControl.DataContext
を定義示唆していません。 UserControl
の内部に設定すると、後で特定のUserControl
が期待どおりに動作しない理由を理解しようとすると、後で混乱する可能性があります。DataContext
私は特定のUserControl
と一緒に行くことになっているViewModel
を作成するときに
は個人的に、私は私のViewModel
私のカスタムUserControl
で描画されるのすべてのインスタンスように、アプリケーションにDataTemplate
を設定することを好みます。これは私がUserControl.DataContext
は常にビジュアルツリーは、タイプChimeriaViewMmodel
のオブジェクトに遭遇した時はいつでもこれは、暗黙のうちにChimeriaView
を使用する特定のViewModel
タイプの
<DataTemplate DataType="{x:Type local:ChimeriaViewModel}">
<local:ChimeriaView /> <!-- DataContext will always be ChimeriaViewModel -->
</DataTemplate>
になると仮定していることを意味します。
は例えば、以下はStackPanel
知ることによってChimeriaView
オブジェクト
<ItemsControl ItemsSource="{Binding MyListOfChimeriaViewModels}" />
または私は通常もContentControl
<!-- Will get drawn using ChimeriaView due to DataTemplate defined above -->
<ContentControl Content="{Binding MyChimeriaViewModelProperty}" />
のようなものを使用します単一のオブジェクトを表示するために、でいっぱいレンダリングされますChimeriaView
のDataContext
はタイプChimeriaViewModel
のオブジェクトになりますが、私はDependencyProperty
を完全に取り除きます
<UserControl>
<StackPanel>
<!-- I know the DataContext is ChimeriaViewModel -->
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Description}" />
</StackPanel>
</UserControl>
upvotesから私はそれが実際の問題であると思っています。 –
xamlまたはコードを追加して、必要なものを実行しようとしています。より正確に問題を表示します。 –
コードはここにあります。後でXAMLを追加しますが、何もできないのでIMOは必要ありません。 –