簡體   English   中英

數據綁定到對象屬性失敗,無法工作到父對象

[英]Databinding to an Object property fails, to the parent it is working

我試圖將屬性綁定到嵌套對象,但是失敗。

我看過這些問題,但我認為我在其他地方犯了另一個錯誤。 也許有人可以給我后悔。

WPF:如何綁定到嵌套屬性?

綁定到對象的屬性

上滑塊/文本框具有正確的綁定,而下滑塊/文本框沒有正確綁定。

我有兩個帶有對應文本框的滑塊:

<StackPanel>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <TextBox Text="{Binding Path= boundnumber, Mode=TwoWay, FallbackValue='binding failed'}" ></TextBox>
    <Slider Value="{Binding Path= boundnumber, Mode=TwoWay}" Width="500" Maximum="1000" ></Slider>
</StackPanel>

    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" DataContext="{Binding Path=myDatarow}">

        <TextBox Text="{Binding Path= boundnumber, Mode=TwoWay, FallbackValue='binding failed'}" ></TextBox>
        <Slider Value="{Binding Path= boundnumber, Mode=TwoWay}" Width="500" Maximum="1000" ></Slider>
</StackPanel>
</StackPanel>

后面的代碼:

public partial class MainWindow : INotifyPropertyChanged
    {
        public MainWindow()
        {
            DataContext = this;
            InitializeComponent();
        }

        private int _boundnumber;
        public int boundnumber
        {
            get { return _boundnumber; }
            set
            {
                if (value != _boundnumber)
                {
                    _boundnumber = value;
                    OnPropertyChanged();
                }
            }
        }

        Datarow myDatarow = new Datarow(11);

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged([CallerMemberName] string propertyname = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
        }
    }

class Datarow : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged([CallerMemberName] string propertyname = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
    }

    public Datarow()
    {

    }

    public Datarow(int number)
    {
        boundnumber = number;
    }

    private int _boundnumber;
    public int boundnumber
    {
        get { return _boundnumber; }
        set
        {
            if (value != _boundnumber)
            {
                _boundnumber = value;
                OnPropertyChanged();
            }
        }
    }
}

您需要將myDatarow公開到一個公共屬性(如boundnumber

    private DataRow _myDatarow = new DataRow(11);
    public DataRow myDataRow
    {
        get { return _myDatarow; }
    }

只是一個額外的建議。 最好將DataContext類與MainWindow分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM