2015-09-22 75 views
1

好吧我一直在關注這個問題,我錯過了一些東西,我無法弄清楚什麼。最終,我試圖設置數據綁定,這樣我就可以更新值,以便隨時顯示,但對於我的生活而言,這不起作用。C#XAML數據綁定在財產變更時沒有效果

的XAML是:

<TextBox x:Name="textBox" HorizontalAlignment="Left" 
    Height="37" Margin="85,38,0,0" TextWrapping="Wrap" 
    Text="{Binding Path=TBBind}" VerticalAlignment="Top" 
    Width="121" /> 

請注意,我有{Binding Path=TBBind}集。

後面的代碼是:

using System.ComponentModel; 
using System.Windows; 

namespace Databinding_Practice_2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window, INotifyPropertyChanged 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      TBBind = "test"; 
     } 

     private string _tBBind; 

     public string TBBind 
     { 
      get { return _tBBind; } 
      set 
      { 
       if (value != _tBBind) 
       { 
        _tBBind = value; 
        OnPropertyChanged("TBBind"); 
       } 
      } 

     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void OnPropertyChanged(string property) 
     { 
      MessageBox.Show("OnPropertyChanged triggered"); 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(property)); 
      } 
     } 
    } 
} 

幫助我OBI-W ....哦,等等,幫助我的人!

回答

1

嘗試:

public MainWindow() 
{ 
    InitializeComponent(); 
    DataContext = this; 
    TBBind = "test"; 
} 

的區別就在這裏設置了關鍵DataContext財產。這是你在這裏實現的MVVM模式的基石。您應該考慮將視圖模型責任分離到另一個類中,然後將視圖的DataContext設置爲該類的一個實例,但您採用的方法適用於簡單情況。

+0

謝謝,我知道這是我失蹤的愚蠢! –

2

假設你要使用MVVM模式(代表模型 - 視圖 - 視圖模型):

你的主窗口是查看。

你應該創建另一個類是視圖模型,就像這樣:

public class MainWindowViewModel : INotifyPropertyChanged 
{ 
    public MainWindowViewModel() 
    { 
     TBBind = "test"; 
    } 

    private string _tBBind; 

    public string TBBind 
    { 
     get { return _tBBind; } 
     set 
     { 
      if (value != _tBBind) 
      { 
       _tBBind = value; 
       OnPropertyChanged("TBBind"); 
      } 
     } 

    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string property) 
    { 
     MessageBox.Show("OnPropertyChanged triggered"); 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 

您的主窗口後面的代碼將會變成這個樣子刪除所有視圖模型相關的東西的MainWindowViewModel課後:

public partial class MainWindow : Window 
{ 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

} 

現在,您應該將View與ViewModel鏈接起來,有很多方法可以做到這一點。這裏是其中的一個:

在主窗口的XAML,已在Window元素中的以下內容:

<Window.DataContext> 
    <wpfApplication5:MainWindowViewModel /> 
</Window.DataContext> 

<Grid> 
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="37" Margin="85,38,0,0" TextWrapping="Wrap" Text="{Binding TBBind}" VerticalAlignment="Top" Width="121" /> 
</Grid> 

請注意WpfApplication5在我的WPF項目的命名空間的名稱。你的情況可能會有所不同。

+0

Thankyou,我最終將codekaizen的回答標記爲正確,因爲任何人都有同樣的問題(儘管你的解釋更好)。 Id upvote你的答案,但限制15聲望:s –

+0

這是一個很好的答案,我會upvote它! – codekaizen

+1

謝謝你們:) –