Wpf 设置一个;“依赖属性”;编码

Wpf 设置一个;“依赖属性”;编码,wpf,binding,code-behind,dependency-properties,Wpf,Binding,Code Behind,Dependency Properties,我今天心情很好 我有以下代码在名为ActionScreen的类中删除依赖项属性: #region Dependency Properties & Methods public string DescriptionHeader { get { return (string)GetValue(DescriptionHeaderProperty); } set { SetValue(DescriptionHeaderProperty, value); } } // Usin

我今天心情很好

我有以下代码在名为ActionScreen的类中删除依赖项属性:

#region Dependency Properties & Methods

public string DescriptionHeader
{
    get { return (string)GetValue(DescriptionHeaderProperty); }
    set { SetValue(DescriptionHeaderProperty, value); }
}

// Using a DependencyProperty as the backing store for DescriptionHeader.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty DescriptionHeaderProperty =
    DependencyProperty.Register("DescriptionHeader", typeof(string), typeof(ActionScreen), new UIPropertyMetadata("xxx"));

#endregion
我在Xaml中绑定此属性,如下所示:

                    <GridViewColumn DisplayMemberBinding="{Binding Description}" Header="{Binding DescriptionHeader}" Width="350" />

我也遇到过同样的问题。Dependency属性更改似乎不会发出属性实际上已更改的通知。您必须手动执行此操作。在代码隐藏中,实现INotifyPropertyChanged接口,并在依赖项属性注册中,添加PropertyChangedCallback委托。(示例)

下面是INotifyPropertyChanged实现的示例

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}

这应该允许您的UI看到发生了更改。

您好,我没有设置页面的datacontext

显然我需要这么做

this.DataContext = this;

当我运行DescColText=“blah”时,文本不会出现在我的页面上;嗯,这看起来很接近我想要的。我现在唯一的问题是PropertyChanged为null,因此它永远不会触发事件。在何处添加此事件处理程序?您不会为PropertyChanged添加处理程序。检查输出窗口。确保没有数据绑定错误(它们将以“System.Windows.Data Error:”开头)。此答案无法解决此问题,并且提供了错误的信息。依赖项属性的值更改时会发出通知。依赖项对象永远不需要实现
INotifyPropertyChanged
。问题是该属性是
ActionScreen
的属性,而不是
ActionScreen
的DataContext的属性,后者是绑定的默认源。正确的答案是为绑定提供正确的源代码:
Header=“{binding DescriptionHeader,RelativeSource={RelativeSource AncestorType=local:ActionScreen}}”
。否<代码>数据上下文=此总是错误的。它将破坏控件本身的绑定。正确的答案是为绑定提供正确的源代码:
Header=“{binding DescriptionHeader,RelativeSource={RelativeSource AncestorType=local:ActionScreen}}”
public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}
this.DataContext = this;