简体   繁体   中英

Two Way binding to a Dependency Property in a User Control and call a method

I know, title is a little confusing so let me explain. I have a user control that has a dependency property. I access this dependency property with a regular property called Input. In my view model I also have a property called Input. I have these two properties bound together in XAML using two-way binding as shown below:

<uc:rdtDisplay x:Name="rdtDisplay" Input="{Binding Input, Mode=TwoWay}" Line1="{Binding myRdt.Line1}" Line2="{Binding myRdt.Line2}" Height="175" Width="99"  Canvas.Left="627" Canvas.Top="10"/>

Okay in my view model, I call a method whenever the value of Input is changed as shown in my property:

public string Input
        {
            get
            {
                return input;
            }
            set
            {
                input = value;
                InputChanged();
            }
        }

The problem with this is that when I set the value of Input in my view model it only updates the value of the variable input as per my setter in my property. How can I get this to update back to the dependency property in the user control? If I leave the code input = value; out then I get a compilation error.

I need something like this:

public string Input
            {
                get
                {
                    return UserControl.Input;
                }
                set
                {
                    UserControl.Input = value;
                    InputChanged();
                }
            }

If I make the Input property in my view model look like this:

public string Input
        {
            get; set;
        }

then it works, however, I am unable to call the InputChanged() method that I need to call when the Property is changed. All suggestions are appreciated.

Implement INotifyPropertyChanged in your ViewModel

public class Sample : INotifyPropertyChanged
{
    private string input = string.Empty;
    public string Input
    {
        get
        {
            return input;
        }
        set
        {
            input = value;
            NotifyPropertyChanged("Input");
            InputChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

}

In your case, you can do it in the code behind of your usercontrol

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM