如果我有一个动态创建XAML的资源加载器(在这种情况下返回StackPanel
)我如何在xaml中绑定到它?
我的财产是:
public StackPanel InfoPane {get;set;}
我试过这个,但它不起作用
<Grid>
<ContentPresenter Content="{Binding InfoPane}" />
</Grid>
答案 0 :(得分:1)
您不需要绑定,所有您需要做的就是在创建StackPanel时将StackPanel添加到Children集合。
那就是说,我的建议是采取不同的路线:
将内容控件放入网格并将其内容绑定到实际内容(而不是控件),并为ContentTemplate注册每种类型的内容,以便ContentControl根据显示的内容选择正确的模板。
应尽可能避免在代码中创建UI,因为它很难维护,WPF有办法处理依赖于内容的UI。
答案 1 :(得分:1)
(对不起,评论太久了。)
你的方法是正确的,以下最小的例子对我有用:
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
属性后设置DataContext
?请注意,您不会调用PropertyChanged
,因此用户界面无法知道InfoPane
已更改。