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)
Kullanım RelativeSource –
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