2014-02-28 47 views
1

我有2個「文本框」綁定到源模式爲「mode = 2way」的源字符串屬性。當我改變一個文本,另一個完全改變。但是,當我以編程方式更改源字符串既不會得到更新。我無法弄清楚我錯過了什麼。這裏是我的代碼片段:當編寫程序源改變時綁定的目標控件不更新

XAML代碼:

<StackPanel Orientation="Vertical"> 
    <StackPanel.DataContext> 
     <local:x/> 
    </StackPanel.DataContext> 
    <TextBox Text="{Binding Text,Mode=TwoWay}" /> 
    <TextBox Text="{Binding Text, Mode=TwoWay}"/> 
</StackPanel> 
<Button Content="Reset" Click="Button_Click"/> 

按鈕單擊處理程序:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    obj = new x() { Text="reset success"}; 
} 

對象類:

class x:INotifyPropertyChanged 
{ 
    private string text; 
    public string Text 
    { 
     get { return text; } 
     set 
     { 
      text = value; 
      OnPropertyChange("Text"); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChange(string propertyName) 
    { 
     PropertyChangedEventHandler propertyChangedEvent = PropertyChanged; 
     if (propertyChangedEvent != null) 
     { 
      propertyChangedEvent(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

我找到了一種解決方法,通過在代碼 – Sidney

+0

中設置stackpanel的datacontext請檢查答案或給我們添加更多的幫助 – Krekkon

回答

1

你做了一個新的對象。這就是原因。不要讓一個新對象投射並更改實際綁定對象的內容(文本)。

當您創建一個新對象時,解決方案中會丟失「subcription」。 :(

1
<StackPanel x:Name="myStackPanel" Orientation="Vertical"> 
    <StackPanel.DataContext> 
     <local:x/> 
    </StackPanel.DataContext> 
    <TextBox Text="{Binding Text, Mode=TwoWay}" /> 
    <TextBox Text="{Binding Text, Mode=TwoWay}"/> 
</StackPanel> 

XAML摘錄上述手段:集DataContext st ackpanel到類x的新實例。因爲由XAML完成的實例化,所以直到從堆棧面板DataContext中獲取該實例爲止,您沒有對該實例的引用。

如果要測試數據綁定是否有效,則應修改x(現在設置爲DataContext)類的現有實例。

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var currentDataContext = (x)myStackPanel.DataContext; 
    x.Text = "reset success"; 
} 

如果你想從代碼中設置StackPanelDataContext在評論指出,這是保存在XAML刪除DataContext設置部分。

+0

我仍然不明白的行爲我相信綁定工作,無論我在第一個文本框出現在第二,但是當我使用按鈕來重置這兩個,沒什麼發生.... – Sidney

+0

是的,綁定工程,兩個文本框綁定到相同的'x'實例。但在按鈕單擊,您重置一個x'類的新實例,而不是那些文本框已經綁定的那個。 – har07

相關問題