一个数据绑定可防止其他人工作

时间:2015-07-15 19:05:56

标签: c# wpf xaml data-binding binding

我有一个状态标签的文本块'。我想要更新这个标签,当发生这种情况时,我希望它的颜色也能自动设置 - 以及可见性(标签在内容有效之前是不可见的)。

问题是,如果我指定的不仅仅是文本绑定,那么文本块不会改变(即文本不会出现,并且仍然是隐藏的)。 实际上,我也试过没有绑定可见性,看起来前景也阻止了绑定。

<TextBlock x:Name="StatusInfo"
                               HorizontalAlignment="Center" VerticalAlignment="Bottom"
                               FontSize="9"
                               Visibility="{Binding ElementName=ThisUc,
                                                    Path=StatusLabelVisibility}"
                               Text="{Binding ElementName=ThisUc,
                                              Path=StatusLabel}"
                               Foreground="{Binding ElementName=ThisUc,
                                                    Path=StatusLabelBrush}" />

这一切都在UserControl中,所以我使用了StatusLabel属性的依赖属性,因为我想将它绑定到主窗口中的属性...前景和可见性属性不是依赖属性,因为我不喜欢想暴露他们。 这是我的属性设置器和getter:

public string StatusLabel
        {
            get { return (string)GetValue(StatusLabelProperty); }
            set
            {
                SetValue(StatusLabelProperty, value);
                RaisePropertyChanged("StatusLabel");
                if (value != string.Empty)
                {
                    StatusLabelVisibility = System.Windows.Visibility.Visible;
                    if (value.HasAny("success", "ok") && !value.HasAny("partial"))
                    {
                        StatusLabelBrush = Brushes.Green;
                    }
                    else if (value.HasAny("fail"))
                    {
                        StatusLabelBrush = Brushes.DarkRed;
                    }
                    else if (value.HasAny("partial"))
                    {
                        StatusLabelBrush = Brushes.DarkGoldenrod;
                    }
                    else
                    {
                        StatusLabelBrush = Brushes.Black;
                    }
                }
                else
                {
                    StatusLabelVisibility = System.Windows.Visibility.Collapsed;
                }
            }
        }

请让我知道我做错了什么,也许这不是完全没办法的?

干杯

====================

虽然梅雷迪思的答案解决了这个问题,但我发表评论以供将来参考(因为这对我来说并不明显):

在这里 - 如果你直接分配UserControl属性,而不是通过属性绑定,它似乎失去了绑定&#39; - 如果你试图再次更改绑定属性,它将不会像在失去绑定之前那样更新控件&#39;

干杯

1 个答案:

答案 0 :(得分:3)

如果StatusLabel是DependencyProperty,则无法在setter中添加任何其他东西 - 它不会被正确调用。查找为DependencyProperties执行更改事件的方法。你需要一个PropertyChangedCallback。查看How to use PropertyChangedCallBack。提高你的道具变化,并在回调中设置所有其他属性。