WPF绑定到函数?
让我先说我对WPF很陌生,所以要温柔WPF绑定到函数?,wpf,data-binding,Wpf,Data Binding,让我先说我对WPF很陌生,所以要温柔 看起来这应该很容易,但我只是错过了一些东西。我已经在一些类/属性上实现了INotifyPropertyChanged,并开始将它们绑定到XAML中的元素,但现在我有了一个更复杂的绑定,然后更新文本或更改颜色。我需要的是,当对象的报警属性设置为true时,我需要更改颜色、启动动画、创建和显示控件中的其他元素。我想我可以在属性更改时调用控件中的函数,但由于WPF隐藏了元素如何“绑定”到模型属性,因此我不确定如何将其连接起来。是否有更好的方法对属性更改执行此类更复
看起来这应该很容易,但我只是错过了一些东西。我已经在一些类/属性上实现了INotifyPropertyChanged,并开始将它们绑定到XAML中的元素,但现在我有了一个更复杂的绑定,然后更新文本或更改颜色。我需要的是,当对象的报警属性设置为true时,我需要更改颜色、启动动画、创建和显示控件中的其他元素。我想我可以在属性更改时调用控件中的函数,但由于WPF隐藏了元素如何“绑定”到模型属性,因此我不确定如何将其连接起来。是否有更好的方法对属性更改执行此类更复杂的响应?如果没有,还有样品吗?我找不到任何与我要查找的内容相近的内容,但我可能没有使用正确的术语进行搜索。您的计时器/警报只需要在绑定属性过期时更新它。然后,属性应引发PropertyChanged事件,通知GUI进行更新。计时器/警报只需在绑定属性过期时更新绑定属性即可。然后,属性应引发PropertyChanged事件,以通知GUI进行更新。您应该查看当视图模型中的属性更改时触发的数据触发器。当属性值更改时,Enteraction和ExitActions将允许您播放故事板。下面是一个如何使用它的示例。您可以使用内容控件并设置模板或内容模板的样式,以添加所有元素,并使其控制其他元素的可见性或不透明度。您应该了解当视图模型中的属性更改时触发的数据触发器。当属性值更改时,Enteraction和ExitActions将允许您播放故事板。下面是一个如何使用它的示例。可以使用内容控件并设置模板或内容模板的样式来添加所有元素,并使其控制其他元素的可见性或不透明度 我需要的是当对象的报警属性设置为true I时 需要更改颜色、启动动画、创建和显示其他 控件中的元素
- 更改颜色:将要更改颜色的元素的颜色/前景绑定到设置报警的布尔值,并在绑定中添加一个
,该绑定基于布尔值返回一个IValueConverter
笔刷
- 启动动画:在需要设置动画的元素上使用(数据)触发器,在该触发器中,使用情节提要定义所需的动画
- 在控件中创建和显示其他元素:这实际上取决于您的MVVM表现如何,如果这些元素是通过
列表框
/
列表视图
/
(它应该是)的项控件
可见集合的可视化,将
连接到任何设置报警开/关的对象(Button类内置了一个Command属性,其他命令
可能需要使用System.Windows.Interactivity),并按照该UIElement
将指向的方法,向命令
添加一个新项,ObservableCollection
将通过添加新控件自动反映更改ItemsControl
- 更改颜色:将要更改颜色的元素的颜色/前景绑定到设置报警的布尔值,并在绑定中添加一个
,该绑定基于布尔值返回一个IValueConverter
笔刷
- 启动动画:在需要设置动画的元素上使用(数据)触发器,在该触发器中,使用情节提要定义所需的动画
- 在控件中创建和显示其他元素:这实际上取决于您的MVVM表现如何,如果这些元素是通过
列表框
/
列表视图
/
(它应该是)的项控件
可见集合的可视化,将
连接到任何设置报警开/关的对象(Button类内置了一个Command属性,其他命令
可能需要使用System.Windows.Interactivity),并按照该UIElement
将指向的方法,向命令
添加一个新项,ObservableCollection
将通过添加新控件自动反映更改ItemsControl
Bab.对于响应属性更改事件的复杂行为,您应该使用以下方法:(我正在键入此自由式,请原谅任何小的语法错误)
对于响应属性更改事件的复杂行为,您应该使用以下方法:(我正在键入此自由样式,请原谅任何小的语法错误)
我认为你看得不对。您的类具有逻辑、计算、强制约束以及强制属性之间的关系。如果您有一个警报,希望有一些业务逻辑来处理它,应该在类(而不是UI)中完成。UI不是用来处理报警的,而是用来显示报警的状态和动作。您将使新控件在报警情况下可见,并隐藏其他控件。在动画方面,我想你可能会想
class MyClass : INotifyPropertyChanged
{
//Presumably you've already done this part
private object _myProperty = null;
public object MyProperty
{
get { return _myProperty; }
set
{
_myProperty = value;
NotifyPropertyChanged("MyProperty");
}
}
public MyClass()
{
this.PropertyChanged += My_PropertyChanged;
}
private void My_PropertyChanged( object sender, PropertyChangedEventArgs e)
{
if( e.PropertyName == "MyProperty" )
{
//Do Something complicated
}
}