2014-10-10 43 views
0

這是出於好奇問題。我知道你不應該以這種方式構建真正的WPF應用程序。用單個窗口類綁定

僅使用MainWindow類工作如何將XAML元素綁定到CLR屬性?

這是我的XAML。

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TextBlock DockPanel.Dock ="Top" Height="50" Width="50" 
        Background ="AliceBlue" FontSize ="16" /> 
    </Grid> 
</Window> 

和代碼

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window, INotifyPropertyChanged 
    { 
     string _myString = "hello world"; 
     public string MyString 
     { 
      get { return _myString; } 
     } 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     void OnPropertyChanged(string propName) 
     { 
      if (this.PropertyChanged != null) 
       this.PropertyChanged(
        this, new PropertyChangedEventArgs(propName)); 
     } 
    } 
} 

所以我想顯示在文本塊中的字符串。我認爲它是一個簡單的綁定,但我找不到正確的語法。謝謝

回答

1

你必須設置你自己的窗口數據上下文。

<Window.DataContext> 
    <Binding RelativeSource="{RelativeSource Self}"/> 
</Window.DataContext> 

那麼你不能綁定到你的財產MyString

<TextBlock DockPanel.Dock ="Top" Height="50" Width="50" 
       Background ="AliceBlue" FontSize ="16" /> 
+0

感謝。從你的答案中我學到了,我也可以在後面的代碼中設置DataContext。 public MainWindow(){InitializeComponent(); this.DataContext = this; } – user1181337 2014-10-10 23:11:47

1

在這種情況下,你可以簡單地做:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    x:Name="MainWindow"> 
    <Grid> 
     <TextBlock DockPanel.Dock ="Top" Height="50" Width="50" 
        Background ="AliceBlue" FontSize ="16" 
        Text="{Binding MyString, ElementName=MainWindow}" /> 
    </Grid> 
</Window> 
+0

此外,只要您的字符串發生更改,您可以通過調用OnPropertyChanged(「MyString」)來獲取綁定更新 – robertos 2014-10-10 22:56:54

+0

謝謝。我做了更改,並得到一個錯誤,說不能使名稱MainWindow與封閉類型相同。所以我改爲x:Name =「MainWindow2」和ElementName = MainWindow2,它工作。 – user1181337 2014-10-10 23:03:29