пользовательские элементы управления и - PullRequest
0 голосов
/ 17 марта 2011

Привет, я написал собственный элемент управления для моего приложения, так что все стало немного проще для меня, и до сих пор он работал отлично, теперь я хотел привязать некоторые данные к обернутому контенту, но Output говорит, что у меня естьошибка привязки и мое свойство "Items" ищется в "CLIENT.UI.SinglePageControl" вместо "CLIENT.MainPage" ....

<phone:PhoneApplicationPage 
x:Class="CLIENT.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="clr-namespace:CLIENT.UI"

mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<Grid>
   <ui:SinglePageControl HeaderTitle="Connections">
        <ui:SinglePageControl.PageContent>

            <ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}" Background="Blue" SelectionChanged="MainListBox_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Margin="0,0,0,17" Width="432" Orientation="Horizontal">
                            <Image Source="UI/PICS/list_connection.png"/>
                            <TextBlock Text="{Binding ItemText}" TextWrapping="Wrap" Foreground="Black"/>

                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

        </ui:SinglePageControl.PageContent>
    </ui:SinglePageControl>

</Grid>

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Попробуйте дать вашему элементу управления значение x: Name, а затем в своем заявлении о привязке укажите ElementName =

<phone:PhoneApplicationPage
    x:Name="pa"
    x:Class="CLIENT.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:ui="clr-namespace:CLIENT.UI"  
    mc:Ignorable="d" 
    d:DesignWidth="480" 
    d:DesignHeight="768" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    SupportedOrientations="PortraitOrLandscape" 
    Orientation="Portrait" shell:SystemTray.IsVisible="True"> 
    <Grid>
        <ui:SinglePageControl HeaderTitle="Connections">
             <ui:SinglePageControl.PageContent>
                 <ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items, ElementName=pa}" Background="Blue" SelectionChanged="MainListBox_SelectionChanged">
                     <ListBox.ItemTemplate>                 
                         <DataTemplate>
                             <StackPanel Margin="0,0,0,17" Width="432" Orientation="Horizontal">
                                <Image Source="UI/PICS/list_connection.png"/> <TextBlock Text="{Binding ItemText, ElementName=pa}" TextWrapping="Wrap" Foreground="Black"/>
                             </StackPanel>                     </DataTemplate>
                     </ListBox.ItemTemplate>
                 </ListBox>
              </ui:SinglePageControl.PageContent>
        </ui:SinglePageControl>
    </Grid>
0 голосов
/ 17 марта 2011

Невозможно понять, как вы устанавливаете контексты данных и т. Д., Сказать сложно, но, судя по предоставленной вами информации, на уровне вашего ListBox ваш контекст данных равен SinglePageControl.PageContent.Обычно контекст данных родителя (MainPage) наследуется по визуальному дереву, поэтому тот факт, что это не так, подразумевает, что SinglePageControl.PageContent устанавливает свой собственный контекст данных.Если вам это не нужно, просто удалите код (this.DataContext = this;, например), который его устанавливает, и тогда контекст данных будет унаследован.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...