WPF: How to bind to a nested property?

后端 未结 3 1212
清歌不尽
清歌不尽 2020-12-05 06:54

I can bind to a property, but not a property within another property. Why not? e.g.



        
相关标签:
3条回答
  • 2020-12-05 07:06

    You can also set DataContext for TextBox in XAML (I don't know if it's optimal solution, but at least you don't have to do anything manually in codeBehind except of implementing INotifyPropertyChanged). When your TextBox has already DataContext (inherited DataContext) you write code like this:

    <TextBox 
       DataContext="{Binding Path=ParentProperty}"
       Text="{Binding Path=ChildProperty, Mode=TwoWay}" 
       Width="30"/>
    

    Be aware that until your DataContext for TextBox isn't ready binding for Text property will not be 'established' - you can add FallbackValue='error' as Binding parameter - it will be something like indicator which will show you if binding is OK or not.

    0 讨论(0)
  • 2020-12-05 07:24

    Do both the ParentProperty and your class implement INotifyPropertyChanged?

        public class ParentProperty : INotifyPropertyChanged
        {
            private string m_ChildProperty;
    
            public string ChildProperty
            {
                get
                {
                    return this.m_ChildProperty;
                }
    
                set
                {
                    if (value != this.m_ChildProperty)
                    {
                        this.m_ChildProperty = value;
                        NotifyPropertyChanged("ChildProperty");
                    }
                }
            }
    
            #region INotifyPropertyChanged Members
    
            #endregion
        }
    
        public partial class TestClass : INotifyPropertyChanged
        {
            private ParentProperty m_ParentProperty;
    
            public ParentProperty ParentProperty
            {
                get
                {
                    return this.m_ParentProperty;
                }
    
                set
                {
                    if (value != this.m_ParentProperty)
                    {
                        this.m_ParentProperty = value;
                        NotifyPropertyChanged("ParentProperty");
                    }
                }
            }
    }
        public TestClass()
    
        {
            InitializeComponent();
            DataContext = this;
            ParentProperty = new ParentProperty();
            ParentProperty.ChildProperty = new ChildProperty();
    
            #region INotifyPropertyChanged Members
            #endregion
        }
    
    0 讨论(0)
  • 2020-12-05 07:27

    All I can think of is that the ParentProperty is being changed after the Binding is created, and it does not support change notification. Every property in the chain must support change notification, whether it be by virtue of being a DependencyProperty, or by implementing INotifyPropertyChanged.

    0 讨论(0)
提交回复
热议问题