avalondock如何以编程方式绑定Title, IsSelected等属性
本文关键字:Title IsSelected 属性 绑定 方式 编程 avalondock | 更新日期: 2023-09-27 17:49:16
我使用avalondock版本2。我想知道如何以编程方式绑定标题,IsSelected等属性。从LayoutDocument到ViewModel。我想使用SetBinding,但不幸的是,LayoutDocument没有这样的方法。
我知道这种方法,但不幸的是它不适合我。我做DockingService控制Windows和DockingService有一个方法
public void ShowDocumentWindow<TViewModel>() where TViewModel : DocumentItemViewModel
{
var viewModel = this.CreateViewModel(typeof(TViewModel));
var view = this.CreateView(viewModel);
var documentPane = this.dockingManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();
if (documentPane != null)
{
var layoutDocument = new LayoutDocument
{
Content = view
};
documentPane.Children.Add(layoutDocument);
}
}
但是我不知道如何在这个方法中绑定属性Title, IsSelected
您必须在视图中将ViewModel的实例设置为DataContext。之后,你就可以在你想要绑定的属性上使用例如Text="{Binding Path=YourProperty}"
了。
从这篇如何:在代码中创建绑定,你可以使用BindingOperations.SetBinding
。
public void ShowDocumentWindow<TViewModel>() where TViewModel : DocumentItemViewModel
{
var viewModel = this.CreateViewModel(typeof(TViewModel));
var view = this.CreateView(viewModel);
var documentPane = this.dockingManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();
if (documentPane != null)
{
var layoutDocument = new LayoutDocument
{
Content = view
};
Binding binding = new Binding("SomeProperty"); //viewModel.SomeProperty
binding.Source = viewModel;
BindingOperations.SetBinding(layoutDocument, LayoutDocument.TitleProperty, binding);
documentPane.Children.Add(layoutDocument);
}
}