その場で XAML を作成するリソース ローダーがある場合 (この場合は aStackPanel
が返されます)、xaml でこれにバインドするにはどうすればよいですか?
私の財産は:
public StackPanel InfoPane {get;set;}
私はこれを試しましたが、うまくいきません
<Grid>
<ContentPresenter Content="{Binding InfoPane}" />
</Grid>
(すみません、コメントするには長すぎます。)
あなたのアプローチは正しいです、次の最小限の例は私にとってはうまくいきます:
XAML:
<Grid>
<ContentPresenter Content="{Binding InfoPane}" />
</Grid>
コードビハインド:
public StackPanel InfoPane { get; set; }
public MainWindow()
{
InitializeComponent();
InfoPane = new StackPanel();
InfoPane.Children.Add(new TextBlock { Text = "dynamically created" });
this.DataContext = this;
}
したがって、あなたの問題はどこかにあるはずです。たぶん、ウィンドウのプロパティを設定したInfoPane
後に設定しましたか?を呼び出さないので、UI はそれが変更されたことを知る方法がないことにDataContext
注意してください。PropertyChanged
InfoPane
バインディングは必要ありません。必要なのは、StackPanel が作成されたときに、StackPanel を Children コレクションに追加することだけです。
そうは言っても、私のアドバイスは別のルートを取ることです:
コンテンツ コントロールをグリッドに配置し、そのコンテンツを実際のコンテンツ (コントロールではない) にバインドし、コンテンツの種類ごとに ContentTemplate を登録して、表示されるコンテンツに応じて ContentControl が正しいテンプレートを選択するようにします。
コードでの UI の作成は、保守が難しく、WPF にはコンテンツ依存の UI を処理する方法があるため、できる限り避ける必要があります。