2013-07-29 40 views
1

我有一個MainWindow,並在其中包含UserControl1和UserControl2,它們都包含一個TextBox。如何在不同的用戶控件中綁定文本框

什麼是綁定這兩個文本框的Text屬性的最佳方式。

MainWindow.xaml

<Window x:Class="DataBindTest1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Controls="clr-namespace:DataBindTest1"> 
    <StackPanel> 
     <Controls:UserControl1/> 
     <Controls:UserControl2/> 
    </StackPanel> 
</Window> 

UserControl1.xaml

<UserControl x:Class="DataBindTest1.UserControl1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <TextBox Name="uc1TextBox">ExampleText</TextBox> 
    </Grid> 
</UserControl> 

UserControl2.xaml

<UserControl x:Class="DataBindTest1.UserControl2" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
      <TextBox Name="uc2TextBox" /> <!--I want this to be bound to the Text property of uc1TextBox (which is in UserControl1)--> 
    </Grid> 
</UserControl> 

提前任何幫助謝謝,

維傑

+0

我改變UserControl2.xaml此,而是它沒有工作:「<用戶控件X:類= 「DataBindTest1.UserControl2」 的xmlns =「HTTP://schemas.mic rosoft.com/winfx/2006/xaml/presentation」 的xmlns:X = 「http://schemas.microsoft.com/winfx/2006/xaml」 的xmlns:控制= 「CLR-名稱空間:DataBindTest1」> ' – vijay

回答

1

你可能在兩個文本框的Text屬性綁定到相同的視圖模型對象,它被設置爲MainWindowDataContext和繼承到用戶控件的屬性:

<UserControl x:Class="DataBindTest1.UserControl1" ...> 
    <Grid> 
     <TextBox Text="{Binding SomeText}"/> 
    </Grid> 
</UserControl> 

<UserControl x:Class="DataBindTest1.UserControl2" ...> 
    <Grid> 
     <TextBox Text="{Binding SomeText}"/> 
    </Grid> 
</UserControl> 

<Window x:Class="DataBindTest1.MainWindow" ...> 
    <Window.DataContext> 
     <local:ViewModel/> 
    </Window.DataContext> 
    <StackPanel> 
     <Controls:UserControl1/> 
     <Controls:UserControl2/> 
    </StackPanel> 
</Window> 

Text屬性的ViewModel類這兩個用戶控件結合:

public class ViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    private string someText; 
    public string SomeText 
    { 
     get { return someText; } 
     set 
     { 
      someText= value; 
      OnPropertyChanged("SomeText"); 
     } 
    } 
} 
+0

Hi Clemens。這對我想要做的事情有效。並有助於發展我對WPF數據綁定的理解。謝謝。 (對不起,我不能提供你的答案,因爲我今天只加入堆棧溢出並且沒有最低的聲望級別來這麼做)。 – vijay

+0

不客氣。您可以通過檢查左側的接受標記來接受答案。請參閱[這裏](http://meta.stackexchange.com/a/5235)它是如何工作的。 – Clemens

+0

哦,是的,那是你怎麼做的。謝謝。 – vijay

相關問題