मैं अक्सर अपने व्यूमोडेल में एक TreeViewItem के IsExpanded और IsSelected गुणों को बांधता हूं। उदाहरण के लिए, जब पेड़ लोड हो जाता है या किसी आइटम को चुनने पर विस्तृत किया जाता है तो आइटम को पूर्व-विस्तारित करना संभव बनाता है।मैं शैली के लिए एक डिजाइनर डेटाैकेंटेक्स्ट कैसे निर्दिष्ट कर सकता हूं, इसलिए Resharper मेरी गुण पाता है?
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 ItemSelected नहीं मिल रहा और ItemExpanded गुण है बाइंडिंग में और उन्हें एक चेतावनी के रूप में रेखांकित करता है।
मैं समझ सकता हूं कि यह उन्हें क्यों नहीं ढूंढता है (मैंने शैली के लिए डेटाकोन्टेक्स्ट प्रकार के रूप में "TestViewModel" निर्दिष्ट नहीं किया है), लेकिन मैं इसे कैसे ठीक कर सकता हूं?
समस्या यहाँ है, शैली TreeView में परिभाषित किया गया है और वहाँ DataContext स्पष्ट रूप से एक TestViewModel पर सेट है: एक शैली-डिजाइन-DataContext ...
अद्यतन के रूप में ऐसी कोई चीज नहीं है। चेकर नहीं मिलता है, जो कि मैं शैली हूं वह एक वृक्ष दृश्य आइटम है और इस आइटम में टेस्ट आइटम का डेटा कॉन्टेक्स्ट है व्यूमोडेल (आइटम स्रोत स्रोत का प्रकार)।
ओह, और मैं भी TreeView.ItemContainerStyle में शैली स्थापित करने की कोशिश की बजाय अगर TreeView.Resources (यहां यह स्पष्ट किया जाना चाहिए DataContext एक TextItemViewModel हो गया है), लेकिन यह कुछ भी नहीं बदलता है ...
उपयोग relativeSource बाध्यकारी –
को खोजने के लिए है कि केवल नहीं है अन्य दृश्य? मैंने अपने व्यूमोडेल प्रॉपर्टी नामों को और अधिक स्पष्ट करने के लिए संपादित किया है, मैं व्यूमोडेल पर बाध्यकारी हूं। – JCH2k