即使 属性 是,绑定也不会更新

Binding Not Updating Even Though Property Is

我正在开发一个用户控件,它有几十个绑定(一些通过 DependencyProperties,另一些通过使用 INotifyPropertyChanged 的属性),除了一个之外,所有这些都工作得很好。

在 XAML 我有:

<TextBox Grid.Row="5" Text="{Binding FilterPreview, RelativeSource={RelativeSource AncestorType={x:Type UserControl}},UpdateSourceTrigger=PropertyChanged}"/>

而 属性 本身是:

private string FilterPreview
{
    get { return filterPreview; }
    set
    {
        filterPreview = value;
        OnPropertyChanged(nameof(FilterPreview));
    }
}

但无论我将 FilterPreview 设置为什么,文本框 都不会显示任何值 。我什至添加了一个按钮,将 FilterPreview 设置为当前时间进行测试。当我添加断点时,我可以看到 FilterPreview 本身正在正确更新,但我无法弄清楚为什么该值没有显示在文本框中。

举个例子,XAML 中大约有 10 行,我有这一行:

<TextBlock Text="{Binding ShowAdvancedFilterBuilderButtonText, RelativeSource={RelativeSource AncestorType={x:Type UserControl}},UpdateSourceTrigger=PropertyChanged}"/>

与 属性:

public string ShowAdvancedFilterBuilderButtonText
{
    get { return showAdvancedFilterBuilderButtonText; }
    set
    {
        showAdvancedFilterBuilderButtonText = value;
        OnPropertyChanged(nameof(ShowAdvancedFilterBuilderButtonText));
    }
}

而且那个工作正常,即使它们基本上完全一样。我还应该提到,我尝试使用 TwoWay 作为 XAML 中的 Mode 属性,但 属性 没有更新值。我也尝试删除 RelativeSourceUpdateSourceTrigger 属性,但这也没有任何帮助。

如有任何建议或想法,我们将不胜感激。

您只能绑定到 public 属性,不能绑定到 private 属性。第二个示例中的 属性 是 public,这就是它起作用的原因。相应地更改 FilterPreview 属性 访问修饰符。

public string FilterPreview
{
   get { return filterPreview; }
   set
   {
      filterPreview = value;
      OnPropertyChanged(nameof(FilterPreview));
   }
}