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。