2015-01-19 11 views
8

Genellikle TreeViewItem öğesinin IsExpanded ve IsSelected özelliklerini görüntüleme modelime bağlarım. Bu, örneğin, ağaç yüklendiğinde bir öğenin önceden genişletilmesini veya seçildiğinde bir öğeyi genişletmeyi mümkün kılar.Bir stil için tasarımcı veri birimini nasıl belirtebilirim, bu yüzden Resharper benim özelliklerimi bulur?

<Window x:Class="StyleSetterDatatypeTest.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:test="clr-namespace:StyleSetterDatatypeTest" 
      Title="MainWindow" Height="350" Width="525" 
      mc:Ignorable="d" 
      d:DataContext="{d:DesignInstance test:TestViewModel, IsDesignTimeCreatable=True}"> 

    <TreeView ItemsSource="{Binding Items}"> 
     <TreeView.Resources> 
      <Style TargetType="TreeViewItem"> 
       <Setter Property="IsExpanded" Value="{Binding ItemExpanded}"/> 
       <Setter Property="IsSelected" Value="{Binding ItemSelected}"/> 
      </Style> 

      <HierarchicalDataTemplate DataType="{x:Type test:TestItemViewModel}" ItemsSource="{Binding Children}"> 
       <TextBlock Text="{Binding Name}"/> 
      </HierarchicalDataTemplate> 
     </TreeView.Resources> 
    </TreeView> 
</Window> 

Ve benim ViewModel bu gibi görünebilir::

XAML şöyle görünür

public class TestItemViewModel 
{ 
    public bool ItemExpanded { get; set; } 

    public bool ItemSelected { get; set; } 

    public string Name { get; set; } 

    public string[] Children 
    { 
     get { return new [] {"Child 1", "Child 2"}; } 
    } 
} 

Bu yürütme ve tasarımcı içinde çalışıyor, ancak Resharper ItemSelected bulmak ve özellikleri ItemExpanded gelmez Bağlamalarda bunları bir uyarı olarak altını çiziyor.
Onları neden bulamadığını anlayabiliyorum (Style için Datacontext türü olarak hiç "TestViewModel" belirtmedim), ancak bunu nasıl düzeltebilirim? burada

sorun deyişle, stil TreeView tanımlanır ve orada DataContext açıkça bir TestViewModel olarak ayarlanır: Bir Stil-Tasarım-DataContext ...

UPDATE diye bir şey yoktur. Denetleyici alamadım, bu tarz bir TreeView Öğe ve bu öğenin Test Öğesi ViewModel'e (bir ItemsSource öğesinin türü) sahip olması.

Oh, ve ayrıca TreeView.ItemContainerStyle stil ayarlama çalıştı yerine eğer TreeView.Resources ... ama bu şey değişmez (burada DataContext bir TextItemViewModel olmak zorundadır açık olmalıdır)

+0

Kullanım RelativeSource –

+0

bağlayıcı sadece bulmak için değil mi diğer görüşler Viewmodel özellik adlarını düzenledim, böylece viewmodel'e bağlanıyorum. – JCH2k

cevap

10

için aynı çözüm gibi görünüyor genelde doğru olmakla birlikte, benim durumumda bu çözüm tamamen tasarımcı görünümü gösteren devre dışı hataları üretir. <d:Style.DataContext>etiketinin<Style> etiketinin içinde belirtilmesi bana yardımcı oldu. hatasız Bu şekilde

<Style> 
    <d:Style.DataContext> 
     <x:Type Type="local:MyTreeItem" /> 
    </d:Style.DataContext> 
    <!--usual setters, triggers, etc.--> 
</Style> 

d:DataContext da kontroller için belirtilebilir ve bunun arayüzler sağlayabilir

, iç içe sınıflar ve hatta jenerik: https://stackoverflow.com/a/46637478/5598194

+0

Bu bir nihayet işe yarar! Artık tasarımcı hatası yok! – JCH2k

+1

Fantastik! D: DataContext'i ekli bir özellik olarak atama (normalde Window/UserControl için yaptığım gibi) bir tasarımcı hatasına neden oldu, ancak ReSharper özellikleri bulup doğrulayabildi. Cevabınız gibi stilin içinde atayın, tasarımcı hatasını giderir ve ReSharper'ın kendi işini yapmasına izin verir! Bu cevabı çözüm olarak @ JCH2k olarak işaretleyin. –

1

Eğer denediniz:

<Style TargetType="TreeViewItem" d:DataContext="{d:DesignInstance  
test:TestItemViewModel}"> 

özellikleri vurgulanmış ve VS 2015 yılında IntelliSense ile gösterilen ve R 9. edilmektedir benim için En azından.

lhildebrandt cevabı @ Specify datacontext type on listbox ItemContainer in style

+0

Bu benim için çalışmıyor. 'Özellik' DataContext '' Style '' elemanlarına eklenemedi hatası aldım –

İlgili konular