我有一个WPF项目,我想启动多个程序,并将它们嵌入到我的应用程序。我有一个继承自HwndHost并实现BuildWindowCore抽象方法的类。我还注册了一个名为FileName的依赖项属性,希望通过绑定动态指定要启动的程序。下面是ListBox的代码:
<ListBox ItemsSource="{Binding Datas}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<local:PowerHwndHost FileName="{Binding Path}"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
下面是继承自HwndHost的类的代码:
public class PowerHwndHost : HwndHost
{
public string FileName
{
get { return (string)GetValue(FileNameProperty); }
set { SetValue(FileNameProperty, value); }
}
public static readonly DependencyProperty FileNameProperty =
DependencyProperty.Register("FileName", typeof(string), typeof(PowerHwndHost), new PropertyMetadata(""));
protected override HandleRef BuildWindowCore(HandleRef hwndParent)
{
//dosomething
}
protected override void DestroyWindowCore(HandleRef hwnd)
{
//dosomething
}
}
下面是视图模型的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
}
public class MainViewModel
{
public ObservableCollection<Data> Datas { get; set; }
public MainViewModel()
{
Datas = new()
{
new Data(){Path="D:/example.exe"},
new Data(){Path="D:/example2.exe"}
};
}
}
public class Data
{
public string Path { get; set; } = "";
}
我尝试通过绑定动态指定要启动的程序。我希望在调用BuildWindowCore方法时,FileName属性已经绑定到正确的值。然而,实际上,当调用BuildWindowCore方法时,绑定甚至还没有生效。我无法获取FileName绑定的值,这导致BuildWindowCore无法正常工作。
1条答案
按热度按时间jdgnovmf1#
我发现,即使绑定尚未激活,也可以手动从DataContext获取数据