INotifyPropertyChanged的PropertyChanged成员始终为null

时间:2014-07-10 18:39:00

标签: c# wpf

我试图将文本块绑定到变量slctItem。我可以看到它包含我需要的必要数据,但是我的窗口没有显示我期望的数据。这是我控制背后的代码。此控件由弹出窗口使用,该窗口将显示控件的值。

在遍历代码时,我发现每次在OnPropertyChanged()方法中处理程序都返回null。为什么?我一定是在做错事。同样slcItem确实包含我想要使用的数据。 OnPropertyChanged()方法也会触发它,只包含处理程序的空值。

public partial class MetaData : UserControl, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string _slctItem;

    public MetaData()
    {
        InitializeComponent();
    }

    public string slctItem
    {
        get
        {
            return _slctItem;
        }
        set
        {
            _slctItem = value;
            OnPropertyChanged("slctItem");
        }
    }

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    internal void Refresh()
    {
        try
        {
            // If DataContext is Null or a detached DataRow, disable the view
            if (DataContext != null && (DataContext is DataRow && ((DataRow)DataContext).RowState != System.Data.DataRowState.Detached))
            {

                if (DataContext is "Something Here")
                {
                    slctItem = (("Something Here")this.DataContext).NAME;
                }
            }
        }
        catch (Exception e)
        {
            throw new Exception("MetaData -> Refresh(): " + e.Message);
        }
    }

这是我控件的XAML代码。在这里,我尝试绑定到slctItem

<TextBox Grid.Column="2" Grid.Row="0" Text="{Binding Path=slctItem, Mode=OneWay, Converter={StaticResource myFirstCharToUpperConverter}}" Width="150" Height="25" HorizontalAlignment="Left" />

1 个答案:

答案 0 :(得分:2)

您需要将DataContext设置为自己:

public MetaData()
{
    InitializeComponent();
    this.DataContext = this;
}

这将允许绑定找到适当的属性。现在,如果在运行时查看输出窗口中的Debug Output,您应该会看到绑定错误,因为未设置数据上下文。