2010-02-11 7 views
1

Учитывая следующий код, почему «My Stupid Text» никогда не привязан к текстовому полю UserControls?Невозможно связать привязку свойства UserControl

MainPage.xaml

<Grid x:Name="LayoutRoot"> 
    <Local:Stupid StupidText="My Stupid Text" /> 
</Grid> 

Stupid.xaml

<UserControl x:Class="SilverlightApplication5.Stupid" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <TextBlock Text="{Binding StupidText}" /> 
    </Grid> 
</UserControl> 

Stupid.xaml.cs

public partial class Stupid : UserControl 
{ 
    public string StupidText 
    { 
     get { return (string)GetValue(StupidTextProperty); } 
     set { SetValue(StupidTextProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for StupidText. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty StupidTextProperty = 
     DependencyProperty.Register("StupidText", typeof(string), typeof(Stupid), new PropertyMetadata(string.Empty)); 

    public Stupid() 
    { 
     InitializeComponent(); 
    } 
} 
+0

Ответ ниже это хорошо, но я на самом деле способствовали этому элементу управления, а чем UserControl, и теперь моя привязка прекрасна. –

ответ

2

Выполните следующие действия в конструкторе пользовательского элемента управления (после InitializeComponent) и ваш текстовый блок должен знать свой файл данных:

this.DataContext = this; 
+0

Это не работает, сам пользовательский элемент управления не имеет свойства «StupidText». Он также предполагает, что нет других элементов управления, которые необходимо привязать к типичному источнику данных из DataContext. Решением здесь является привязка элемента к элементу. – AnthonyWJones

+0

Вы ошибаетесь. StupidText * - это свойство самого пользовательского элемента управления, и мое предложение работает отлично. –

0

Дайте Stupid контроль имя: -

<Local:Stupid x:Name="MyStupid" StupidText="My Stupid Text" /> 

Затем вы можете использовать привязки, как этот элемент: -

<TextBlock Text="{Binding StupidText, ElementName=MyStupid}" /> 
Смежные вопросы