WPF绑定到函数?

WPF绑定到函数?,wpf,data-binding,Wpf,Data Binding,让我先说我对WPF很陌生,所以要温柔 看起来这应该很容易,但我只是错过了一些东西。我已经在一些类/属性上实现了INotifyPropertyChanged,并开始将它们绑定到XAML中的元素,但现在我有了一个更复杂的绑定,然后更新文本或更改颜色。我需要的是,当对象的报警属性设置为true时,我需要更改颜色、启动动画、创建和显示控件中的其他元素。我想我可以在属性更改时调用控件中的函数,但由于WPF隐藏了元素如何“绑定”到模型属性,因此我不确定如何将其连接起来。是否有更好的方法对属性更改执行此类更复

让我先说我对WPF很陌生,所以要温柔


看起来这应该很容易,但我只是错过了一些东西。我已经在一些类/属性上实现了INotifyPropertyChanged,并开始将它们绑定到XAML中的元素,但现在我有了一个更复杂的绑定,然后更新文本或更改颜色。我需要的是,当对象的报警属性设置为true时,我需要更改颜色、启动动画、创建和显示控件中的其他元素。我想我可以在属性更改时调用控件中的函数,但由于WPF隐藏了元素如何“绑定”到模型属性,因此我不确定如何将其连接起来。是否有更好的方法对属性更改执行此类更复杂的响应?如果没有,还有样品吗?我找不到任何与我要查找的内容相近的内容,但我可能没有使用正确的术语进行搜索。

您的计时器/警报只需要在绑定属性过期时更新它。然后,属性应引发PropertyChanged事件,通知GUI进行更新。

计时器/警报只需在绑定属性过期时更新绑定属性即可。然后,属性应引发PropertyChanged事件,以通知GUI进行更新。

您应该查看当视图模型中的属性更改时触发的数据触发器。当属性值更改时,Enteraction和ExitActions将允许您播放故事板。下面是一个如何使用它的示例。您可以使用内容控件并设置模板或内容模板的样式,以添加所有元素,并使其控制其他元素的可见性或不透明度。

您应该了解当视图模型中的属性更改时触发的数据触发器。当属性值更改时,Enteraction和ExitActions将允许您播放故事板。下面是一个如何使用它的示例。可以使用内容控件并设置模板或内容模板的样式来添加所有元素,并使其控制其他元素的可见性或不透明度

我需要的是当对象的报警属性设置为true I时 需要更改颜色、启动动画、创建和显示其他 控件中的元素

  • 更改颜色:将要更改颜色的元素的颜色/前景绑定到设置报警的布尔值,并在绑定中添加一个
    IValueConverter
    ,该绑定基于布尔值返回一个
    笔刷
  • 启动动画:在需要设置动画的元素上使用(数据)触发器,在该触发器中,使用情节提要定义所需的动画
  • 在控件中创建和显示其他元素:这实际上取决于您的MVVM表现如何,如果这些元素是通过
    列表框
    /
    列表视图
    /
    项控件
    (它应该是)的
    可见集合的可视化,将
    命令
    连接到任何设置报警开/关的对象(Button类内置了一个Command属性,其他
    UIElement
    可能需要使用System.Windows.Interactivity),并按照该
    命令
    将指向的方法,向
    ObservableCollection
    添加一个新项,
    ItemsControl
    将通过添加新控件自动反映更改
当然,这只是原始信息,你可能对所有这些东西都不熟悉,那就是谷歌开始发挥作用的时候;)

嗯,

巴布

我需要的是当对象的报警属性设置为true I时 需要更改颜色、启动动画、创建和显示其他 控件中的元素

  • 更改颜色:将要更改颜色的元素的颜色/前景绑定到设置报警的布尔值,并在绑定中添加一个
    IValueConverter
    ,该绑定基于布尔值返回一个
    笔刷
  • 启动动画:在需要设置动画的元素上使用(数据)触发器,在该触发器中,使用情节提要定义所需的动画
  • 在控件中创建和显示其他元素:这实际上取决于您的MVVM表现如何,如果这些元素是通过
    列表框
    /
    列表视图
    /
    项控件
    (它应该是)的
    可见集合的可视化,将
    命令
    连接到任何设置报警开/关的对象(Button类内置了一个Command属性,其他
    UIElement
    可能需要使用System.Windows.Interactivity),并按照该
    命令
    将指向的方法,向
    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
        }
    }