다음은 확장 WPF Toolkit의 DockingManager
(a.k.a AvalonDock)을 사용하는 샘플입니다.DockingManager에서 문서가 닫히는 것을 방지하십시오.
보기 모델 :
public class Person
{
public string Name { get; set; }
public bool CanClose { get; set; }
}
보기 :
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
xmlns:local="clr-namespace:WpfApplication2">
<Grid>
<xcad:DockingManager DocumentsSource="{Binding}">
<xcad:DockingManager.Resources>
<DataTemplate DataType="{x:Type local:Person}">
<StackPanel>
<TextBlock Text="Here's person name:"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</xcad:DockingManager.Resources>
<xcad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content.Name}" />
</DataTemplate>
</xcad:DockingManager.DocumentHeaderTemplate>
<xcad:LayoutRoot>
<xcad:LayoutPanel Orientation="Horizontal">
<xcad:LayoutDocumentPane />
</xcad:LayoutPanel>
</xcad:LayoutRoot>
</xcad:DockingManager>
</Grid>
</Window>
코드 숨김 : 내보기 모델에 CanClose
속성을 통해 폐쇄에서 문서를 방지 할
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new[]
{
new Person { Name = "John" },
new Person { Name = "Mary", CanClose = true },
new Person { Name = "Peter", CanClose = true },
new Person { Name = "Sarah", CanClose = true },
};
}
}
.
<Setter Property="CanClose" Value="{Binding Content.CanClose}"/>
모든 것이 작동합니다 이 나는이 문서 컨테이너에 대한 몇 가지 스타일을해야합니다, 그래서, 내가 좋아하는 뭔가를 쓸 거라고 예상했습니다. 그러나 DockingManager
에는 그런 스타일이없는 것 같습니다.
내가 누락 된 항목이 있습니까?
업데이트.
물론 첨부 된 동작을 작성할 수 있습니다.이 동작은 DockingManager.DocumentClosing
이벤트를 수신하고 모든 뷰 모델로 전달하며 DockingManager
에 바인딩됩니다.
private void DockingManager_DocumentClosing(object sender, Xceed.Wpf.AvalonDock.DocumentClosingEventArgs e)
{
e.Cancel = !((Person)e.Document.Content).CanClose;
}
을하지만 확실히 MVVM-방법이 아니다, 나는 데이터 바인딩을 좋아 :하지만
또 다른 방법은 뷰에서 이벤트를 처리하는 것입니다 ... 아주 바보 같은 날 것으로 보인다.
* shrugs * 죄송합니다. –