2010-04-18 13 views
6

XAML:ag_e_parser_bad_property_value सिल्वरलाइट बाइंडिंग पृष्ठ शीर्षक

<navigation:Page ... Title="{Binding Name}"> 

सी #

public TablePage() 
{ 
    this.DataContext = new Table() 
    { 
     Name = "Finding Table" 
    }; 
    InitializeComponent(); 
} 

बिंदु है जहां शीर्षक बाध्यकारी हो रहा है पर InitializeComponent में एक ag_e_parser_bad_property_value त्रुटि आ रही है। मैंने स्थिर पाठ जोड़ने की कोशिश की है जो ठीक काम करता है। अगर मैं कहीं और बाध्यकारी का उपयोग करता हूं उदाहरण:

<TextBlock Text="{Binding Name}"/> 

यह या तो काम नहीं करता है।

मुझे लगता है कि यह शिकायत कर रहा है क्योंकि डेटाकॉन्टेक्स्ट ऑब्जेक्ट सेट नहीं है, लेकिन अगर मैं प्रारंभिक कॉम्पोनेंट से पहले ब्रेक पॉइंट डालता हूं तो मैं पुष्टि कर सकता हूं कि यह आबादी है और नाम संपत्ति सेट है।

कोई विचार?

उत्तर

8

आप केवल उन गुणों पर डेटा बाइंडिंग का उपयोग कर सकते हैं जो DependencyProperty द्वारा समर्थित हैं। यदि आप TextBlock के लिए दस्तावेज़ों पर नज़र डालें, उदाहरण के लिए आप पाएंगे कि Text संपत्ति TextPropertyDependencyProperty के सार्वजनिक स्थैतिक क्षेत्र से मेल खाती है।

यदि आप Page के लिए दस्तावेज़ देखते हैं तो आपको पता चलेगा कि TitleProperty परिभाषित नहीं है, Title संपत्ति इसलिए निर्भरता संपत्ति नहीं है।

संपादित

कोई रास्ता नहीं इस हालांकि आप एक संलग्न संपत्ति बना सकते हैं "ओवरराइड" करने के लिए नहीं है: -

public static class Helper 
{ 
    #region public attached string Title 
    public static string GetTitle(Page element) 
    { 
     if (element == null) 
     { 
      throw new ArgumentNullException("element"); 
     } 
     return element.GetValue(TitleProperty) as string; 
    } 

    public static void SetTitle(Page element, string value) 
    { 
     if (element == null) 
     { 
      throw new ArgumentNullException("element"); 
     } 
     element.SetValue(TitleProperty, value); 
    } 

    public static readonly DependencyProperty TitleProperty = 
      DependencyProperty.RegisterAttached(
        "Title", 
        typeof(string), 
        typeof(Helper), 
        new PropertyMetadata(null, OnTitlePropertyChanged)); 

    private static void OnTitlePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     Page source = d as Page; 
     source.Title = e.NewValue as string; 
    } 
    #endregion public attached string Title 

} 

अब आप अपने पेज XAML लग सकता है एक सा की तरह: -

<navigation:Page ... 
    xmlns:local="clr-namespace:SilverlightApplication1" 
    local:Helper.Title="{Binding Name}"> 
+0

आह मैं देखता हूं। मुझे लगता है कि इसे ओवरराइड करने का कोई तरीका नहीं है? – zXynK

+0

@zXynK: एक संलग्न संपत्ति शायद आपके मामले में काम करेगी, यह दिखाने के लिए जवाब संपादित करें कि यह कैसे किया जाता है। – AnthonyWJones

+0

आपकी मदद के लिए धन्यवाद। – zXynK

0

MyPage.xaml.cs में निम्नलिखित जोड़ें:

public new string Title 
{ 
    get { return (string)GetValue(TitleProperty); } 
    set { SetValue(TitleProperty, value); } 
} 
public static readonly DependencyProperty TitleProperty = 
    DependencyProperty.Register("Title", 
     typeof(string), 
     typeof(Page), 
     new PropertyMetadata("")); 

एक बार जब आप इस संपत्ति (निर्भरता संपत्ति) को अपने कोड पर जोड़ देते हैं, तो आपका कोड सामान्य के रूप में काम करेगा।

संबंधित मुद्दे