2012-07-05 198 views
0

我想綁定文本框但它不顯示字符串。第二件事是我想定期更新名稱字符串。任何解決方案WPF簡單數據綁定

這裏是我的C#代碼:

public partial class Window1 : Window 
{ 
    public String Name = "text"; 
} 

XAML代碼:

<Grid Name="myGrid" Height="300"> 
    <TextBox Text="{Binding Path=Name}"/> 
</Grid> 

回答

3
public partial class MainWindow : Window,INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 
    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      NotifyCahnge("Name"); 

     } 

    } 

    private void NotifyChange(string prop) 
    { 
     if(PropertyChanged!=null) 
      PropertyChanged(this,new PropertyChangedEventArgs(prop)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

希望這將有助於

1

您需要定義您的NameDependencyProperty

public string Name 
{ 
    get { return (string)GetValue(NameProperty); } 
    set { SetValue(NameProperty, value); } 
} 

public static readonly DependencyProperty NameProperty = 
    DependencyProperty.Register("Name", typeof(string), typeof(Window1)); 

(注意,Visual Studio的定義一個方便的片段propdp爲此,請嘗試輸入propdp + TAB + TAB 。)

然後,你需要正確綁定。類似的東西:

<TextBox Text="{Binding Name, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"/> 
+0

你可以更具體一點嗎? – hellzone

+0

他需要從將其從字段中更改爲開始,WPF不綁定到字段屬性。 – MBen

+0

@MBen:OP需要選擇更改,所以他需要DependencyProperty或INotifyPropertyChanged – Vlad

2

你需要delcare屬性不是字段,你在這裏挖掘的是一個字段。

public String Name {get; set;} 

加上它不應該在控制文件(UI文件)中。將其移動到單獨的類並將其設置爲DataContext。

PLus作爲弗拉德指出,你需要通知用戶界面,事情的變化,簡單proprities沒有。

dataBinding好文章:

+0

這不起作用,OP需要更改變量並使這些更改反映在UI中。 – Vlad

+0

當然。但他還有很長的路要走,我建議閱讀一些關於dataBinding的基礎知識 – MBen

1

WPF綁定與性能,不能下地幹活。您需要定義Name的屬性,還可以設置窗口的數據上下文:

​​

你也可以把它定義爲一個依賴屬性,如果你想支持更改通知和其他DP相關的功能或使用INotifyPropertyChanged。我建議你閱讀更多關於WPF數據綁定here