Установите DataContext текстового поля для текущего класса в Silverlight - PullRequest
3 голосов
/ 10 февраля 2010

У меня есть текстовое поле в UserControl, я создал свойство в UserControl, я хочу связать текстовое свойство textbox со свойством, созданным в usercontrol.

Проблема в том, что я не знаю, как указать текст данных для текущего класса в XAML.

Есть идеи? спасибо

Ответы [ 2 ]

3 голосов
/ 10 февраля 2010

Это позволит получить то, что вы вводите в текстовое поле, в свою собственность в коде. В зависимости от размера вашего проекта я бы посоветовал MVVM отправить код в ViewModel, а затем в UserControl вы должны указать this.DataContext = экземпляр вашей ViewModel.

Xaml:

<UserControl x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <StackPanel>

        <TextBox Text="{Binding Foo,Mode=TwoWay}"/>

        <Button Content="Click" Click="Button_Click"/>

    </StackPanel>

</UserControl>

Код сзади:

 public partial class MainPage : UserControl
 {
    public string Foo { get; set; }

    public MainPage ()
    {
      InitializeComponent();
      this.DataContext = this;
    }
 }
1 голос
/ 11 февраля 2010

Я бы создал привязку в коде. Предположим, что у вашего TextBox есть x:Name="MyTextBox", а также предположим, что вы добавили свойство зависимости (или, по крайней мере, стандартное свойство с реализацией INotifyPropertyChanged), вызываемое на MyText в вашем пользовательском элементе управления.

  public partial class MainPage : UserControl
  {
   public MainPage ()
   {
     InitializeComponent();
     Binding binding = new Binding("MyText");
     binding.Mode = BindingMode.TwoWay;
     binding.Source = this;
     MyText.SetBinding(TextBox.TextProperty, binding);
   }
 }

Это оставляет свойство UserControl DataContext открытым для других более типичных применений.

...