【问题标题】:avalondock 3.3.0.0 mvvm LayoutAnchorableavalondock 3.3.0.0 mvvm LayoutAnchorable
【发布时间】:2018-03-29 09:24:49
【问题描述】:

我正在尝试将 mvvm 用于 avalondock 我有以下属性

Property Documents = New ObservableCollection(Of Xceed.Wpf.AvalonDock.Layout.LayoutAnchorable)

在我的 ViewModel 中,我有以下内容

    Dim RemindersView As New ViewReminders ' This is a simple user control 
    Dim NewItem As New Xceed.Wpf.AvalonDock.Layout.LayoutAnchorable
    NewItem.Title = "My Reminders"
    NewItem.ContentId = "MYID123"
    NewItem.Content = RemindersView
    Documents.Add(NewItem)

XAML(为简单起见,我没有包含完整的 xaml)

 <ad:DockingManager AnchorablesSource="{Binding Documents}">

当我运行应用程序时,我可以看到每个文档的标题,但我看不到用户控件/视图

我只得到以下内容:

如果我使用静态,用户控件会正确显示。

【问题讨论】:

    标签: wpf mvvm avalondock


    【解决方案1】:

    搞清楚:

    第一。使用需要保存的内容创建您的 ViewModel + 创建一个简单的属性 Title

    例如

        Public Class MyViewModel : Implements INotifyPropertyChanged
    
        Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
        Sub NF(ByVal PN As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(PN))
        End Sub
    
        Sub New()
            Title = "This is My Title"
        End Sub
    
        Property RefreshCommand As New MyCommands(AddressOf RefreshCommand_)
    
        Private Sub RefreshCommand_()
            MySomeList =' Get your list from SQL/ MANUALLY OR WITH WHAT EVER IT IS THAT.
        End Sub
    
        Private _Title As String
        Property Title As String
            Get
                Return _Title
            End Get
            Set(value As String)
                _Title = value
                NF("Title")
            End Set
        End Property
    
    
        Private _MySomeList As IEnumerable
        Property MySomeList As IEnumerable
            Get
                Return _MySomeList
            End Get
            Set(value As IEnumerable)
                _MySomeList = value
                NF("MySomeList")
            End Set
        End Property
    
    End Class
    

    第二。将您的视图创建为 UserControl 或在您的 DockingManager 资源中作为 DataTemplates..(下面的示例 XAML)

    Observable Collection 应该是包含 ViewModelsNOT Xceed.Wpf.AvalonDock.Layout.LayoutAnchorable

    的对象类型

    例如

        Documents = New ObservableCollection(Of Object)
        Dim DocumentsVM As New UserDashBoard.DocumentsVM
        Documents.Add(DocumentsVM)
        Dim CustomerBalancesVM As New UserDashBoard.CustomerBalancesViewModel
        Documents.Add(CustomerBalancesVM)
        Dim TransactionsVM As New UserDashBoard.TransactionsVM
        Documents.Add(TransactionsVM)
        Documents.Add(New UserDashBoard.RecurringTransactionVM)
    

    然后在 DockingManagerResources 你定义你的 dataTemplates 像

          <ad:DockingManager.Resources>              
                <DataTemplate DataType="{x:Type profile:CustomerBalancesViewModel}">
                    <DataGrid AutoGenerateColumns="False" AlternatingRowBackground="White"  HeadersVisibility="None" GridLinesVisibility="None" >
                        <DataGrid.Columns>
                            <DataGridTextColumn    Width="*" Binding="{Binding Name}"></DataGridTextColumn>
                            <DataGridTextColumn  Width="50"  Binding="{Binding Balance}" >
                                <DataGridTextColumn.ElementStyle>
                                    <Style TargetType="TextBlock">
                                        <Setter Property="HorizontalAlignment" Value="Right"></Setter>
                                    </Style>
                                </DataGridTextColumn.ElementStyle>
                            </DataGridTextColumn>
    
                        </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>
    
            </ad:DockingManager.Resources>
    

    然后运行您的示例/test,您将看到您的视图..

    至少这应该让您在更改其他模板或设置停靠管理器的样式之前启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多