c# - 我怎樣才能指定一個樣式的設計器datacontext,所以Resharper找到我的屬性?




wpf xaml (2)

你有沒有嘗試過:

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

至少對於我來說,這些屬性在VS 2015和R#9中被高亮顯示並用IntelliSense顯示。

似乎是一個相同的解決方案,以指定listbox ItemContainer樣式datacontext類型

我經常將TreeViewItem的IsExpanded和IsSelected屬性綁定到我的viewmodel。 例如,可以在裝入樹時預先展開項目,或者在選擇項目時展開項目。

XAML看起來像這樣:

<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>

我的viewmodel可能是這樣的:

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"}; }
    }
}

這可以在執行和設計器中正常工作,但是Resharper在Bindings中找不到ItemSelected和ItemExpanded屬性,並將它們作為警告強調。
我可以理解為什麼它沒有找到他們(我從來沒有指定“TestViewModel”作為風格的Datacontext類型),但我該如何解決這個問題? 沒有Style-Design-Datacontext這樣的東西...

更新:

這裡的問題是,風格是在TreeView中定義的,那裡的DataContext顯然被設置為TestViewModel。 檢查器沒有得到,我的樣式是一個TreeView 項目 ,這個項目有一個測試項目 ViewModel的DataContext(一個ItemsSource元素的類型)。

哦,我也試著在TreeView.ItemContainerStyle中設置樣式,而不是TreeView.Resources(這裡應該清楚DataContext必須是TextItemViewModel),但是這不會改變任何東西...


@ lhildebrandt的答案是正確的,但在我的情況下,這種解決方案會產生錯誤,完全禁用在設計器中顯示視圖。 <Style>標籤中指定<d:Style.DataContext>幫助了我。

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

通過這種方式d:DataContext也可以為控件指定,我們可以提供它的接口,嵌套類,甚至泛型沒有任何錯誤: https : //.com/a/46637478/5598194





resharper