2011-05-09 107 views
9

我有兩個文本框,我想保持同步,即兩個文本框的內容應該完全相同。如果一個文本框更改其他文本框內容應自動同步,反之亦然。我想用WPF數據綁定工具來實現它。我有以下代碼:保持兩個文本框在WPF中同步

<Window x:Class="WPFLearning.DataBindingTwoWay" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="DataBindingTwoWay" Height="300" Width="300"> 
    <Grid> 
     <StackPanel> 
      <TextBox x:Name="firstTextBox" Background="Silver"></TextBox> 
      <TextBox x:Name="secondTextBox" Background="Gold" ></TextBox> 
     </StackPanel> 
    </Grid> 
</Window> 

我試過使用綁定標記擴展但無法正確使用。以下是我如何在firstTextBox上指定綁定:

<TextBox x:Name="firstTextBox" Background="Silver" Text="{Binding Source=secondTextBox, Path=Text, Mode=TwoWay}"></TextBox> 

此外,沒有運行時錯誤。我究竟做錯了什麼?

回答

9

如果這是你想要做什麼,WPF將讓你做到這一點:

<Grid> 
    <StackPanel> 
     <TextBox x:Name="firstTextBox" Background="Silver" Text="{Binding Path=Text, ElementName=secondTextBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
     <TextBox x:Name="secondTextBox" Background="Gold" ></TextBox> 
    </StackPanel> 
</Grid> 

ElementName語法是一個非常強大的附加功能結合在DataContext性的基本途徑。許多瘋狂的事情變得可能。

+0

正是我想要的。唯一的區別是,我使用Source = secondTextBox,並且在您的代碼中它是ElementName = secondTextBox。你能否解釋一下這個區別?我將你的回答標記爲答案;它解決了我的問題。 – 2011-05-09 05:14:42

+0

@Anand Patel:查看'ElementName'的文檔。這些評論描述了它,它有一個與你的相似的例子。還有一個鏈接到綁定概述,這是很好的閱讀。這裏是鏈接:http://msdn.microsoft.com/en-us/library/system.windows.data.binding.elementname.aspx – 2011-05-09 05:36:08

1

您確定要將一個文本框綁定到另一個文本框嗎?通過這樣做改變另一個文本框中的文本值不會影響其他文本框(除非每個文本框綁定到另一個,這聽起來像是一件荒謬的事情)。

正確的做法是將兩個文本框(或任意數量的文本框,控件等)綁定到一個屬性。該屬性存在於數據模型和/或視圖模型中。

+1

如何將兩個文本框綁定在一起不同於綁定文本框和數據模型(實現INotifyPropertyChanged)?我這樣做只是爲了學習的目的。沒有Model和ViewModel類:)。我非常清楚(如指定的)我想實現的目標。不清楚如何使用數據綁定來完成這項工作,或者可能使用數據綁定。 – 2011-05-09 04:46:52