2014-02-14 3 views
4

Когда я запускаю это простое приложение wpf, я получаю пустое окно. Любые идеи, что я делаю неправильно?Почему не связывается TextBlock?

//MainWindow.xaml.cs 
public string SimpleText {get;set;} 
public MainWindow() 
{ 
    InitializeComponent(); 
    SimpleText = "this is a test"; 
} 

//MainWindow.xaml 
<StackPanel> 
    <TextBlock Text="{Binding SimpleText}" Width="200"/> 
</StackPanel> 

ответ

1

Вы должны установить DataContext:

public MainWindow() 
{ 
    InitializeComponent(); 
    SimpleText = "this is a test"; 
    this.DataContext = this; 
} 

В качестве альтернативы, вы можете установить DataContext на стороне XAML, как это:

XAML

<Window x:Class="TextBlockDontBind.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:this="clr-namespace:TextBlockDontBind" 
    Title="MainWindow" Height="350" Width="525"> 

    <Window.DataContext> 
     <this:TestData /> 
    </Window.DataContext> 

    <StackPanel> 
     <TextBlock Text="{Binding SimpleText}" Width="200"/> 
    </StackPanel> 
</Window> 

Code-behind

public class TestData 
{ 
    private string _simpleText = "this is a test"; 

    public string SimpleText 
    { 
     get 
     { 
      return _simpleText; 
     } 

     set 
     { 
      _simpleText = value; 
     } 
    } 
} 

Но в этом случае для обновления свойства для класса должен реализоваться интерфейс INotifyPropertyChanged.

+1

Спасибо! Вы также можете установить DataContext перед назначением текста. – 4thSpace

+0

Расширяясь в этом примере, вы знаете, почему в этом сценарии отображается пустое окно: http://stackoverflow.com/questions/21767121/how-to-bind-to-collection-2-deep? DataContext теперь установлен, но все еще ничего. – 4thSpace

+0

@ 4thSpace: см. Мое редактирование, где я описал альтернативу для установки «DataContext». Хорошо, я вижу этот вопрос. –

2

DataContext является путем, но вы также можете использовать расширение RelativeSource разметки, чтобы получить свойство окна:

<TextBlock Text="{Binding SimpleText, RelativeSource={RelativeSource 
          Mode=FindAncestor, AncestorType=Window}}" Width="200"/> 
+0

Почему это необходимо, когда приведен пример нижеприведенного примера DataContext? – 4thSpace

+0

Да, я просто предоставил другой способ достичь этого, не устанавливая DataContext. –

+1

Ах, ладно, спасибо. – 4thSpace

Смежные вопросы