डब्ल्यूपीएफ में परिवर्तनीय बाइंडिंग्स

मैं एक समृद्ध TreeView के लिए UserControl बना रहा हूं (एक जिसमें नोड्स का नाम बदलने के लिए संदर्भ मेनू है, बाल नोड्स इत्यादि जोड़ना)। मैं इस नियंत्रण का उपयोग किसी भी पदानुक्रमित डेटा संरचनाओं को प्रबंधित या नेविगेट करने में सक्षम होना चाहता हूं। मैं वर्तमान में यह किसी भी डेटा संरचना के लिए काम कर रहा हूं जो निम्नलिखित इंटरफ़ेस लागू करता है (इंटरफ़ेस को वास्तव में लागू नहीं किया जाना चाहिए, हालांकि, इन सदस्यों की उपस्थिति केवल आवश्यक है):

interface ITreeItem
{
    string Header { get; set; }
    IEnumerable Children { get; }
}

फिर मेरे UserControl में, मैं अपने पेड़ को डेटा संरचना में बांधने के लिए टेम्पलेट का उपयोग करता हूं, जैसे:


मैं जो करना चाहता हूं वह मेरे RichTreeView में इन सदस्यों में से प्रत्येक का नाम परिभाषित करता है, जिससे यह विभिन्न डेटा संरचनाओं की एक श्रृंखला को अनुकूलित करने की अनुमति देता है, जैसे:

class MyItem
{
    string Name { get; set; }
    ObservableCollection Items;
}


क्या UserControl की सार्वजनिक संपत्ति के रूप में UserControl के अंदर बाध्यकारी पथ का खुलासा करने का कोई तरीका है? क्या इस समस्या को हल करने के लिए कुछ और तरीका है?

0
ro fr bn

1 उत्तर

शायद यह मदद कर सकता है:

हेडर निर्भरता प्रॉपर्टी पर हेडरप्रॉपर्टी प्रॉपर्टी सेट करते समय एक नया बाध्यकारी बनाएं:

शीर्षलेख संपत्ति आपकी सामान्य रोज़मर्रा की निर्भरता प्रजनन है:

    public string Header
    {
        get { return (string)GetValue(HeaderProperty); }
        set { SetValue(HeaderProperty, value); }
    }

    public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.Register("Header", typeof(string), typeof(ownerclass));

और आपके हेडर प्रॉपर्टी की संपत्ति निम्नानुसार काम करती है:

    public static readonly DependencyProperty HeaderPropertyProperty =
        DependencyProperty.Register("HeaderProperty", typeof(string), typeof(ownerclass), new PropertyMetadata(OnHeaderPropertyChanged));

    public string HeaderProperty        
    {
        get { return (string)GetValue(HeaderPropertyProperty); }
        set { SetValue(HeaderPropertyProperty, value); }
    }

   public static void OnHeaderPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        if (args.NewValue != null)
        {
            ownerclass c = (ownerclass) obj;

            Binding b = new Binding();
            b.Path = new PropertyPath(args.NewValue.ToString());
            c.SetBinding(ownerclass.HeaderProperty, b);
        }
    }

हेडरप्रोपर्टी आपकी सामान्य रोजमर्रा की निर्भरता प्रॉपर्टी है, जैसे ही हेडरप्रॉपर्टी में परिवर्तन होता है। तो जब यह बदलता है, तो यह हेडर पर बाध्यकारी बनाता है जो आपके द्वारा हेडरप्रोपर्टी में सेट किए गए पथ से जुड़ जाएगा। :)

0
जोड़ा