1

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

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

4

5 回答 5

1

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

  • 更改颜色:将要更改颜色的元素的颜色/前景绑定到设置警报的布尔值,并在基于布尔值IValueConverter返回的绑定中添加一个。Brush
  • 启动动画:在需要动画的任何元素上使用(数据)触发器,在该触发器中,使用情节提要来定义所需的动画。
  • 在控件中创建和显示其他元素:这实际上取决于您的 MVVM 做得如何,如果这些元素是ObservableCollection通过ListBox/ ListView/的可视化ItemsControl(它应该),将 aCommand连接到设置警报开/关的任何东西( Button 类有一个内置的 Command 属性,其他UIElements 可能需要使用System.Windows.Interactivity)并且在 thisCommand将指向的方法中,向 中添加一个新项,将ObservableCollection通过添加一个新项来ItemsControl自动反映更改控制。

当然这只是原始信息,你可能对所有这些东西都不熟悉,这就是谷歌发挥作用的时候;)

高温下,

呸。

于 2012-04-05T18:46:13.673 回答
0

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

于 2012-04-05T17:57:04.407 回答
0

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

于 2012-04-05T18:28:01.717 回答
0

对于响应属性更改事件的复杂行为,您应该使用以下方法:(我正在输入这个自由式,所以请原谅任何小的语法错误)

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
        }
    }
于 2012-04-05T18:55:13.943 回答
0

我不认为你在看这个权利。您的类具有逻辑、执行计算、强制约束和强制属性之间的关系。如果您有警报,希望有一些业务逻辑来处理这个问题,并且应该在课堂上(而不是 UI)完成。UI 不是为处理警报而构建的,它是为显示该警报的状态和操作而构建的。您将在警报情况下使新控件可见并隐藏其他控件。在动画上,我认为您可能想要抛出一个您监听的事件来启动动画。那里的想法是,当引发警报时可以注册额外的句柄 - 您希望将业务逻辑与 UI 分离(而不是将业务逻辑拉入 UI)。

于 2012-04-05T20:54:39.890 回答