2017-03-25 8 views
0

저는 개발중인 MVVM 응용 프로그램에서 MultiSelectTreeView 컨트롤 (https://github.com/ygoe/MultiSelectTreeView)을 사용하려는 초보자 Visual Basic 개발자입니다. 이들을 함께 사용하는 것에 익숙해지기 위해 MultiSelectTreeView 데모를 VB로 번역하고 Catel을 사용하여 뷰 모델을 구현하기 시작했습니다.Catel이 모든 MultiSelectTreeView 속성을 인식하게 만드는 방법은 무엇입니까?

내가 발견 한 것은 Catel이 일부 MultiSelectTreeView 속성을 사용할 수 없게 만드는 것입니다. Catel를 사용하여 테스트를 실행에 데모 창이 열리고 대부분 예상대로 동작하지만 직접 실행 창 같은 오류의 수를 보여줍니다

System.Windows.Data Warning: 40 : BindingExpression path error: '(Controls:MultiSelectTreeView.HoverHighlighting)' property not found on 'object' ''MultiSelectTreeView' (Name='TheTreeView')'. BindingExpression:Path=(Controls:MultiSelectTreeView.HoverHighlighting); DataItem='MultiSelectTreeView' (Name='TheTreeView'); target element is 'MultiSelectTreeViewItem' (Name=''); target property is 'HoverHighlighting' (type 'Boolean')

비슷한 메시지가 MultiSelectTreeView IsKeyboardMode 및 ItemIndent 속성에 대한 존재를. 코드에서 또는 MainWindow XAML에서 직접 이러한 속성을 설정해도 아무 효과가 없으며 Catel을 사용하면 MultiSelectTreeView의 HoverHighlighting 효과가 더 이상 작동하지 않습니다.

테스트 프로젝트를 GitHub (https://github.com/AnotherKiwi/MultiSelectTreeViewDemoVB)에 업로드했습니다. 마스터 브랜치에는 모든 기능이 작동하는 MultiSelectTreeView 데모의 VB 변환이 들어 있습니다. ImplementingMainWindowViewModel 브랜치에서 Catel을 사용하여 뷰 모델을 구현하기 시작했습니다. 데모 작업의 대부분의 기능은 위에서 언급 한 속성과 관련된 기능을 제외하고 작동합니다.

Catel이 이러한 MultiSelectTreeView 속성을 방해하는 이유에 대한 안내를 누군가가 제공 할 수 있다면 정말 고맙겠습니다! 나는에 주어진 조언을 적용하는 시도

<controls:MultiSelectTreeView 
      x:Name="TheTreeView" 
      ItemsSource="{Binding RootNode.Children}" 
      AllowEditItems="{Binding AllowEditItems}" 
      VerticalRulers="{Binding VerticalRulers}"> 

      <controls:MultiSelectTreeView.ContextMenu> 
       ... 
      </controls:MultiSelectTreeView.ContextMenu> 

      <i:Interaction.Triggers> 
       ... 
      </i:Interaction.Triggers> 

      <controls:MultiSelectTreeView.ItemContainerStyle> 
       <Style TargetType="{x:Type controls:MultiSelectTreeViewItem}"> 
        <Setter Property="DisplayName" Value="{Binding DisplayName}"/> 
        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/> 
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/> 
        <Setter Property="IsEnabled" Value="{Binding IsEnabled, Mode=TwoWay}"/> 
        <Setter Property="IsVisible" Value="{Binding IsVisible, Mode=TwoWay}"/> 
        <Setter Property="IsEditable" Value="{Binding IsEditable, Mode=TwoWay}"/> 
        <Setter Property="IsEditing" Value="{Binding IsEditing, Mode=TwoWay}"/> 
        <Setter Property="Remarks" Value="{Binding Remarks}"/> 
        <Setter Property="IsKeyboardMode" Value="{Binding IsKeyboardMode, Mode=TwoWay}"/> 
        <Setter Property="HoverHighlighting" Value="{Binding HoverHighlighting}"/> 
        <Setter Property="ItemIndent" Value="{Binding ItemIndent}"/> 
        <Setter Property="ToolTip" Value="{Binding ToolTip}" /> 

        <Setter Property="ContentTemplateEdit"> 
         <Setter.Value> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <Border Background="YellowGreen" CornerRadius="3" Width="16" Height="16"/> 
            <controls:EditTextBox 
             Text="{Binding DisplayName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
             Padding="2,0,0,0"/> 
           </StackPanel> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </controls:MultiSelectTreeView.ItemContainerStyle> 

      <controls:MultiSelectTreeView.Resources> 
       <!-- 
       Here the general item appearance is defined, for the ViewModel.TreeItemViewModel type 
       --> 
       <HierarchicalDataTemplate DataType="{x:Type vm:TreeItemViewModel}" ItemsSource="{Binding DataContext.Children}"> 
        <StackPanel Orientation="Horizontal"> 
         <Image Source="{Binding DataContext.ImageSource}" Width="16" Height="16" SnapsToDevicePixels="True"/> 
         <TextBlock Text="{Binding DataContext.DisplayName}" VerticalAlignment="Center" Padding="4,0,2,0"/> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </controls:MultiSelectTreeView.Resources> 
     </controls:MultiSelectTreeView> 

MainWindow.xaml에서 MultiSelectTreeView 컨트롤의 선언은 다음과 같다 @

일부 추가 정보는 @Geert에서 답 이후에 추가 Geert의 대답,하지만 응용 프로그램을 실행할 때 MultiSelectTreeView가 표시되지 않습니다. 저는 WPF에 익숙하지 않아 적절한 XAML 문을 수정하지 않을 것입니다. 이것에 대한 좀 더 많은 도움이 정말 감사 할 것입니다!

답변

0

itemscontrol의 항목이 새로운 DataContext (항목)이므로 ItemTemplate 안에있는 VM에 직접 바인딩 할 수 없습니다. 당신이 VM에 결합해야하는 경우

, 당신은 같이해야합니다 :

<ItemsControl x:Name="myItemsControl" ItemsSource="{Binding MyItems}"> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Content="{Binding ElementName=myItemsControl, Path=DataContext.SomePropertyOnTheVm}" /> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
@Geert이 ... 당신이 있기 때문에 (나 수정해야 내 XAML의 부분을 정확하게 도와주세요 수
+0

감사합니다 ItemsControl이 없습니다.) 차단합니까? –

+0

의견을 확대 하시겠습니까 @ 제우스? –