surajitk
surajitk

Reputation: 147

Binding not working in Checkbox isChecked WPF

I have a xaml file named MyWindow.xaml, and this xaml has a checkbox declared as..

<CheckBox Name="chkView" IsChecked="{Binding Path=IsChkChecked, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  Checked="chkView_Checked" Unchecked="chkView_Checked" />

In MyWindow.xaml.cs,

public partial class MyWindow: UserControl,INotifyPropertyChanged
{
    public MyWindow()
    {
        InitializeComponent();
    }

    private bool isChkChecked;
    public bool IsChkChecked
    {
        get { return isChkChecked; }
        set
        {
            isChkChecked= value;
            OnPropertyChanged("IsChkChecked");
        }
    }
public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

Now, Iam trying to access this property from another class and change the property, but the checkbox is not getting binded to bool property.

MyLib.MyWindow wnd;
            wnd= (MyLib.MyWindow)theTabItem.Content;
                    wnd.IsChkChecked = true;

Any suggestions would be appreciated.

Upvotes: 3

Views: 5860

Answers (2)

MatthiasG
MatthiasG

Reputation: 4532

Your view doesn't bind to IsChkChecked as it doesn't live in the DataContext. Usually you would declare a ViewModel with the property and declare the DataContext to be an instance of this ViewModel. A quick fix would be to change the constructor of the view to set the DataContext to the View itself or change the Binding (as dkozl suggested):

public MyWindow()
{
    InitializeComponent();
    this.DataContext = this;
}

Upvotes: 1

dkozl
dkozl

Reputation: 33384

If you don't specify another binding source by default it will search in DataContext and I cannot see that you set it anywhere. One way is to set RelativeSource against binding to point to Window that publishes IsChkChecked property

<CheckBox Name="chkView" IsChecked="{Binding Path=IsChkChecked, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>

Upvotes: 1

Related Questions