2015-06-23 3 views
0
<Page x:Name="ChatPageName" x:Class="WindowsDesktop.Chat.ChatPage" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:WindowsDesktop.Chat" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
    Title="ChatPage"> 
<Grid> 
    <ToolBar x:Name="ToBar" Grid.Row="0" HorizontalAlignment="Left" Margin="10,42,0,0" VerticalAlignment="Top" Height="28" Width="280"> 
     <TextBox x:Name="ToBarTextBox" Height="22.6666666666667" Margin="0" TextWrapping="Wrap" Text="{Binding Path=ToBarText, Source=ChatPageName}" VerticalAlignment="Top" Width="120"/> 
     <Button x:Name="AddContactButton" Content="Add" Height="23" VerticalAlignment="Top" Width="75" Margin="0,0,0,-0.333" Click="AddContactButton_Click"/> 
    </ToolBar> 

Я пытаюсь связать текст на ToBarTextBox с свойством ToBarText на моем классе ChatPage. Как мне это сделать?Связывание вложенного свойства управления с помощью страницы

Спасибо.

ответ

0

Удалить свойство Source из xaml. При желании можно добавить FallbackValue

<TextBox x:Name="ToBarTextBox" Height="22.6666666666667" Margin="0" TextWrapping="Wrap" Text="{Binding Path=ToBarText, FallbackValue=ToBarText}" VerticalAlignment="Top" Width="120"/> 

В коде позади, вам необходимо установить DataContext (он отвечает за они выбрали источник данных для привязки). В вашей текущей настройке похоже, что вы используете один класс для обработки графического интерфейса и обслуживания данных. В этом случае используйте:

public ChatPage() 
{ 
    // constructor code 
    this.DataContext = this; 
} 

Кроме того, необходимо установить источник данных для реализации INotifyPropertyChanged:

internal class ChatPage : INotifyPropertyChanged 
{ 
    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 

// ... 

Сказав это, я рекомендую узнать о шаблоне Model-View-ViewModel, которая помогает отдельным код GUI из источника данных. Поиск mvvm in wpf

+0

Есть ли способ установить контекст данных в xaml? –

+0

Да, см. Https://stackoverflow.com/questions/1521699/how-to-instantiate-datacontext-object-in-xaml –

Смежные вопросы