C# MVVM轻型提升装置性能改变dosen';行不通

C# MVVM轻型提升装置性能改变dosen';行不通,c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,在该模型中: namespace PlanszaGlowna.Model { public class PlanszaGlowna { public bool CzyWidoczny { get; set; } 在ViewModel中使用此选项 namespace PlanszaGlowna.WidokModelu { public class PlanszaGlowna : ViewModelBase { privat

在该模型中:

 namespace PlanszaGlowna.Model
 {
     public class PlanszaGlowna
     {
         public bool CzyWidoczny { get; set; }
在ViewModel中使用此选项

namespace PlanszaGlowna.WidokModelu
{
    public class PlanszaGlowna : ViewModelBase
    {
        private Model.PlanszaGlowna m_PlanszaGlowna;

        public bool CzyWidoczny
        {
            get { return m_PlanszaGlowna.CzyWidoczny; }
            set
            {
                m_PlanszaGlowna.CzyWidoczny = value;
                RaisePropertyChanged(() => CzyWidoczny);
            }
        }
而且有约束力:

         <UserControl x:Class="PlanszaGlowna.Widok.PlanszaGlowna" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         Visibility="{Binding Path=CzyWidoczny, Converter={StaticResource Bool2VisibilityKonwerter}, Mode=TwoWay}"

问题是模型类PlanszaGlowna.model.PlanszaGlowna未实现InotifyPropertyChanged

因此,实现相同的方法并更改为

 public class PlanszaGlowna : INotifiyPropertyChanged
 {
    ...
    private _CzyWidoczny;
    public bool CzyWidoczny
    {
        get { return _CzyWidoczny; }
        set
        {
            _CzyWidoczny = value;
            RaisePropertyChanged("CzyWidoczny");
        }
    }

只要类PlanszaGlowna.Model.PlanszaGlowna实现InotifyPropertyChanged,并且您已经创建了包装方法RaisePropertyChanged来调用PropertyChanged事件,这将起作用,如果您尝试在绑定中执行以下操作:

 <UserControl x:Class="PlanszaGlowna.Widok.PlanszaGlowna" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     Visibility="{Binding Path=CzyWidoczny, Converter={StaticResource Bool2VisibilityKonwerter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
在上,如果文本属性属于类,则它具有下一个结构:

private string _text= "";
public string Text
    {
        get { return _text; }
        set { _text= value; RaisePropertyChanged("Text"); }
    }    
public class NewClass: INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;
    private string _text;
    public string Text
    {
        get { return _text; }
        set
        {
            if ( _text!= value)
            {
                _text= value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Text"));
                }
            }
        }
    } 
} 

由于非英语属性名,我可能遗漏了一些内容,但是您在哪里设置数据上下文?@user3714853如何以及在哪里设置
DataContext
?更改初始值是否有一些影响?我在父视图中设置了数据上下文:在第一个设置Czywidczny属性中,视图获取值,但在另一个集合中,它们不获取值。在黑暗中拍摄,但在您的
PlanszaGlowna.Widok.PlanszaGlowna
UserControl
中执行类似于
DataContext=this的操作或以任何其他方式设置它?我认为DataContext是可以的,因为其他属性显示正确。当我在ViewModel中更改CzyWidoczny属性时,他输入setter并在model中更改属性,但在RaisePropertyChanged之后,他们不输入getter。