我創建了一個名爲SimpleText的UserControls,並在我的MainWindow.xaml中引用它。我的SimpleText中唯一的是一個TextBox(稱爲tbox)。在我的MainWindow中有另一個TextBox(稱爲tbox2)。我想要實現的是在這兩個文本框之間有一個雙向綁定。綁定用戶控件的元素
我在這裏讀計算器用來改變內部的東西,你必須在用戶控件(糾正我,如果這不是需要)的代碼聲明一個屬性:
public string MyText
{
get { return tboxUser.Text; }
set { tboxUser.Text = value; }
}
然後我可以訪問MYTEXT從MainWindow.xaml但只能給它「靜態」值:
Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication11"
Title="MainWindow" Height="350" Width="525">
<Grid>
<!-- <local:SimpleText MyText="Hello"/> Works !-->
<local:SimpleText MyText="{Binding Text, ElementName=tbox2}"/> <!--Does not work-->
<TextBox x:Name="tbox2" Margin="0,200,0,0" Text="Text Box 2" />
</Grid>
</Window>
它給了我一個錯誤說這個:
A「綁定」不能在「MYTEXT」 p設定類型'SimpleText'的roperty。 '綁定'只能在DependencyObject的DependencyProperty上設置。
但不幸的是,我在這裏很新手,我不知道如何使MyText成爲DependencyProperty。謝謝。
我試過這個,但雖然編譯器拋出沒有錯誤,綁定不起作用。謝謝 – Sturm
我終於可以通過添加DataContext引用和我缺少的其他東西來設置綁定:將我的UserControl XAML文本框綁定到MyText屬性。現在我有一個奇怪的行爲:如果我在MainWindow TextBox(tbox2)中寫入,它會自動更新,但如果我在UserControl文本框(tbox)中寫入,則不會自動更新,我必須單擊另一個文本框才能進行更改。它與INotifyPropertyChanged有關嗎? – Sturm
好的,這是我最後一個問題的解決方案:Text =「{Binding ElementName = miControl,Path = MyText,Mode = TwoWay,UpdateSourceTrigger = PropertyChanged}」。我認爲默認方式是在控件失去焦點時更新(這就是爲什麼當我點擊其他文本框時更新的值)。 – Sturm