Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么wpf复选框绑定会失败?_C#_Wpf_Binding - Fatal编程技术网

C# 为什么wpf复选框绑定会失败?

C# 为什么wpf复选框绑定会失败?,c#,wpf,binding,C#,Wpf,Binding,例如,对有关复选框绑定的几个问题的回答表明 <checkbox IsChecked="{Binding Path=MyProperty, Mode=TwoWay}"/> 更新 3个很好的答案,非常感谢,我想全部接受,但我接受了第一个提到DataContext的答案,这是我最感兴趣的影响绑定方向的部分。双向模式已被证明是一种转移注意力的方式。 感谢MVVM的建议,我正在使用它,但希望此代码尽可能简单您应该实现INotifyPropertyChanged并将DataContext绑定

例如,对有关复选框绑定的几个问题的回答表明

<checkbox IsChecked="{Binding Path=MyProperty, Mode=TwoWay}"/> 
更新

3个很好的答案,非常感谢,我想全部接受,但我接受了第一个提到DataContext的答案,这是我最感兴趣的影响绑定方向的部分。双向模式已被证明是一种转移注意力的方式。
感谢MVVM的建议,我正在使用它,但希望此代码尽可能简单

您应该实现INotifyPropertyChanged并将DataContext绑定到它,然后它就可以工作了

您可以在此处找到msdn链接:


但是,您应该查看模式MVVM来处理wpf/silverlight窗口。这将使您的生活更轻松:

您应该实现INotifyPropertyChanged,并将DataContext绑定到它,然后它就可以工作了

您可以在此处找到msdn链接:


但是,您应该查看模式MVVM来处理wpf/silverlight窗口。这将使您的生活更轻松:

实现INotifyPropertyChanged,并将DataContext设置为:

namespace TestBinding
{
    public partial class Window1 : Window, INotifyPropertyChanged
    {
        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(String _Prop)
        {
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
            }
        }
        #endregion

        bool property = true;

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

        public bool MyProperty
        {
            get
            {
                return property;
            }
            set
            {
                property = value;
                RaisePropertyChanged("MyProperty");
            }
        }
    }
}

实现INotifyPropertyChanged,并将DataContext设置为:

namespace TestBinding
{
    public partial class Window1 : Window, INotifyPropertyChanged
    {
        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(String _Prop)
        {
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
            }
        }
        #endregion

        bool property = true;

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

        public bool MyProperty
        {
            get
            {
                return property;
            }
            set
            {
                property = value;
                RaisePropertyChanged("MyProperty");
            }
        }
    }
}

您需要将DataContext设置为包含xaml绑定到的属性的对象。在您的情况下,只需将Datacontext=this;在狱中。以及实现INotifyPropertyChanged接口,并从每个绑定属性中提升PropertyChange


正如其他人已经说过的,最好使用MVVM模式,在这种模式中,您将属性存储在一个单独的类中,而不是将UI代码隐藏起来

您需要将DataContext设置为包含xaml绑定到的属性的对象。在您的情况下,只需将Datacontext=this;在狱中。以及实现INotifyPropertyChanged接口,并从每个绑定属性中提升PropertyChange


正如其他人已经说过的,最好使用MVVM模式,在这种模式中,您将属性存储在一个单独的类中,而不是将UI代码隐藏起来

您应该支持INotifyPropertyChanged接口,以便使binding workingBinding关键字仅适用于DataContext属性。我会将MyProperty属性移动到视图模型并将其绑定到视图。您应该支持INotifyPropertyChanged接口,以便保持binding workingBinding关键字仅与DataContext属性一起工作。我会将MyProperty属性移动到视图模型并将其绑定到视图。
namespace TestBinding
{
    public partial class Window1 : Window, INotifyPropertyChanged
    {
        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(String _Prop)
        {
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
            }
        }
        #endregion

        bool property = true;

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

        public bool MyProperty
        {
            get
            {
                return property;
            }
            set
            {
                property = value;
                RaisePropertyChanged("MyProperty");
            }
        }
    }
}