Windows Phone 7 XAML — получение привязки для работы с контейнером моего объекта

#xaml #windows-phone-7 #binding #relativesource

#xaml #windows-phone-7 #привязка #relativesource

Вопрос:

Что я хочу сделать, так это привязать текст текстового блока к моему пользовательскому свойству ButtonSymbol пользовательского интерфейса.

Вот XAML для UserControl. Часть привязки для текстового блока должна быть заполнена.

 <UserControl
    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"
    x:Class="Calculator.CalculatorButton"
    d:DesignWidth="120" d:DesignHeight="80">

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Image Source="buttonb@2x.png" Stretch="Fill"/>
        <Button x:Name="InvisibleButton" Content="{Binding ButtonSymbol}" Margin="0,0,0,0" d:LayoutOverrides="Width, Height" BorderThickness="1" Click="InvisibleButton_Click"/>
    <TextBlock HorizontalAlignment="Center" Margin="0,0,0,0" TextWrapping="Wrap" 
               Text="{Binding ????????}" 
               VerticalAlignment="Top"/>
    </Grid>
</UserControl>
  

И вот исходная часть кода:

 namespace Calculator
{
    public partial class CalculatorButton : UserControl
    {
        public string ButtonSymbol {get; set;}

        public CalculatorButton()
        {
            // Required to initialize variables
            InitializeComponent();
        }

        private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            // TODO: Add event handler implementation here.
        }

        private void InvisibleButton_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            Debug.WriteLine(@"click");
            Debug.WriteLine(ButtonSymbol);
            // TODO: Add event handler implementation here.
        }
    }
}
  

Обратите внимание, что это WP7 с Silverlight, а класс RelativeSource отличается от других версий.

Ответ №1:

Вам нужно установить DataContext пользовательского элемента управления.

Если вы добавите это:

 this.DataContext = this;
  

затем вы можете выполнить это в конструкторе или загруженном событии пользовательского элемента управления:

 Text="{Binding ButtonSymbol}"
  

Обратите внимание, что вы также можете декларативно привязать источник данных XAML, это просто простой программный способ сделать это.