标签:c event-handling events delegates wpf
我真的不确定如何解释这个…我将把代码放在psuedo代码中以便于阅读
当一个类的bool变量发生变化时,我想要一个标签来改变它的文本…我不知道我需要使用什么因为我使用的是WPF而且这个类不能只改变标签我不能我想?
我需要某种活动吗?还是WPF活动?谢谢你的帮助
public MainWindow()
{
SomeClass temp = new SomeClass();
void ButtonClick(sender, EventArgs e)
{
if (temp.Authenticate)
label.Content = "AUTHENTICATED";
}
}
public SomeClass
{
bool _authenticated;
public bool Authenticate()
{
//send UDP msg
//wait for UDP msg for authentication
//return true or false accordingly
}
}
解决方法:
除了BradledDotNet之外的另一种WPF方法是使用触发器.这将是纯粹基于XAML而没有转换器代码.
XAML:
<Label>
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsAuthenticated}" Value="True">
<Setter Property="Content" Value="Authenticated" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
同样的规则适用于BradledDotNet所提到的,应该附加ViewModel并且“IsAuthenticated”属性应该引发PropertyChanged事件.
– 按照Gayot Fow的建议添加一些样板代码 –
查看代码背后:
为简单起见,我将在后面的代码中设置视图的DataContext.为了更好的设计,您可以使用ViewModelLocator,如here所述.
public partial class SampleWindow : Window
{
SampleModel _model = new SampleModel();
public SampleWindow() {
InitializeComponent();
DataContext = _model; // attach the model/viewmodel to DataContext for binding in XAML
}
}
示例模型(它应该是ViewModel):
这里的要点是附加的模型/ viewmodel必须实现INotifyPropertyChanged.
public class SampleModel : INotifyPropertyChanged
{
bool _isAuthenticated = false;
public bool IsAuthenticated {
get { return _isAuthenticated; }
set {
if (_isAuthenticated != value) {
_isAuthenticated = value;
OnPropertyChanged("IsAuthenticated"); // raising this event is key to have binding working properly
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string propName) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
标签:c,event-handling,events,delegates,wpf 来源: https://codeday.me/bug/20190716/1477340.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。