【问题标题】:Data Binding on a User Control用户控件上的数据绑定
【发布时间】:2012-03-29 17:11:48
【问题描述】:

我有一个用户控件,它的 Title 属性绑定到 TextBlock 的 Text 属性:

XAML

<TextBlock Grid.Column="0" Text="{Binding ElementName=me,Path=Title}" HorizontalAlignment="Left" VerticalAlignment="Top" />

后面的代码

public String Title
{
    get { return (String)GetValue(TitleProperty); }
    set { SetValue(TitleProperty, value); }
}

public static readonly DependencyProperty TitleProperty =
    DependencyProperty.Register("Title", typeof(String), typeof(ClosableTabHeader), new UIPropertyMetadata(""));

我希望将此 Title 属性绑定到主窗口上的另一个属性:

XAML

<my:ClosableTabHeader Title="{Binding ElementName=me,Path=ShortenAmount}" />

后面的代码

public Int32 ShortenAmount
{
    get { return (Int32)GetValue(ShortenAmountProperty); }
    set { SetValue(ShortenAmountProperty, value); }
}

public static readonly DependencyProperty ShortenAmountProperty =
    DependencyProperty.Register("ShortenAmount", typeof(Int32), typeof(MainWindow), new UIPropertyMetadata(0));

但是,文本块不会更新。

但是,当我用 TextBlock 替换 usercontrol 声明时,它可以正常工作:

<TextBlock Text="{Binding ElementName=me,Path=ShortenAmount}" />

虽然肯定有解决方法,但就我自己尝试做的事情而言,我可以知道我哪里出错了吗?

【问题讨论】:

  • 包含 x:Name=me 的代码在哪里?

标签: .net wpf data-binding user-controls


【解决方案1】:

问题在于您的ElementName。从您的代码中,my:ClosableTabHeader未命名meme 看起来像你的 MainWindow。但是您在此绑定中同时使用meTitle...

   <TextBlock Grid.Column="0" Text="{Binding ElementName=me,Path=Title}"  
              HorizontalAlignment="Left" VerticalAlignment="Top" /> 

其中TitleClosableTabHeader 的属性,而不是MainWindowMainWindow.Title 作为内置 WPF 属性存在,但我确定我们不是在谈论它)

【讨论】:

  • 感谢您的洞察力。问题是我将 CloseableTabHeader 和 MainWindow 都命名为“我”。我不知道通过在 MainWindow 中声明 CloseableTabHeader 会在“我”上发生名称冲突,甚至是 CloseableTabHeader 中的代码。虽然这回答了我的问题,但这是否意味着 WPF 代码不太灵活(因为必须确保所有控件都有不同的名称)?
  • 这不是关于灵活,而是总体上遵循 XML 规范。 Namescoping 在 XML 域中是严格的。因此,XAML 也虔诚地遵循它...msdn.microsoft.com/en-us/library/ms746659.aspx...并且考虑到它们的范围是相互抽象的,相同命名的元素可能存在于可视化树中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多