我正在制作一个测试应用程序来处理CardReader,我有一个带有CardReader状态的枚举和一个带有TextBlock的XAML窗口,我希望当状态改变时,onPropertyChanged用状态的名称更改TextBlock。
下面是我代码的一部分:
public class CardControler : INotifyPropertyChanged
{
private CardState state;
public CardState State
{
get { return state; }
set
{
if (state != value)
{
state = value;
OnPropertyChanged(state);
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(CardState state)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(state.ToString()));
}
}......................................................................
public partial class CardReader : Window
{
public CardControler control { get; set; }
public CardReader(int port)
{
this.DataContext = control;
this.port = port;
InitializeComponent();
ScreenWrite(CardState.Initializing);
Thread thread = new Thread(new ThreadStart(asincControlCreate));
thread.Start();
}在xaml中
<TextBlock Name="Screen" Text="{Binding Path=control.state}></TextBlock>我希望我能正确地解释我的自我,有人能帮助我。提前感谢
发布于 2015-01-27 14:38:50
我认为问题在于,您使用的是正在更改的OnPropertyChanged值,而不是实际的属性名称(即(本案中的“国家”)。
protected void OnPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}我怀疑您还需要更改XAML以绑定到适当的属性(注意,属性名是State而不是state - XAML将区分大小写):
<TextBlock Name="Screen" Text="{Binding Path=control.State}></TextBlock>发布于 2015-01-27 14:37:28
下面的行是不正确的,因为您应该将propertyName作为参数传递而不是state.ToString()
PropertyChanged(this, new PropertyChangedEventArgs(state.ToString()));因此,您的代码应该类似于:
public CardState State
{
get { return state; }
set
{
if (state != value)
{
state = value;
OnPropertyChanged("State");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}此外,请记住,xaml是区分大小写的,所以{Binding State}与{Binding state}不一样。
发布于 2015-01-27 14:36:45
您应该传递更改的属性的名称,而不是其值:
PropertyChanged(this, new PropertyChangedEventArgs("State"));https://stackoverflow.com/questions/28172904
复制相似问题