Silverlight: настройка контекста данных для сетки или UIElement не работает - PullRequest
0 голосов
/ 05 мая 2011

Я что-то упускаю из-за того, что должно быть прямым связыванием, и я надеюсь, что кто-то может указать мне правильное направление.

У меня есть приложение SL, которое имеет модель представления с именем PeopleView Model, которая содержит число или свойства для человека (имя и т. Д.) страница состоит из пользовательского элемента управления, текстового поля и вида сетки

Код пользователя

        <frm:LabelFieldContainer Width="145" 
                             Height="42"
                             Margin="12,12,0,0"
                             HorizontalAlignment="Left"
                             VerticalAlignment="Top"
                             MyContent="{Binding FirstName}"
                             MyLabel="{StaticResource lblFirstName}" />
    <frm:LabelFieldContainer Width="178" 
                             Height="42"
                             Margin="166,12,0,0"
                             HorizontalAlignment="Left"
                             VerticalAlignment="Top"
                             MyContent="{Binding LastName}"
                             MyLabel="{StaticResource lblLastName}"  />
</Grid>

этот контейнер состоит из другого пользовательского элемента управления, который связывается со словарем ресурсов, чтобы получить имя метки, а затем поле содержимого, которое должно быть привязано к свойству, возвращенному из моей модели представления (MyContent). цель здесь состояла в том, чтобы создать общий элемент управления, который отображал бы название метки и значение из коллекции. то есть. Имя: Джон. В настоящее время метка работает в привязке к словарю ресурсов, но привязка для значения (MyContent) ничего не возвращает.

Вот xaml для MainPage.xaml

<Grid x:Name="LayoutRoot" Background="White">
    <uc:AddressContainer />
    <TextBlock Width="200" 
               Height="50"
               Margin="101,71,99,179"
               FontSize="12"
               Foreground="Black"
               Text="{Binding LastName}" />
    <telerik:RadGridView Name="GridView1" Margin="0,140,0,6"
                         HorizontalAlignment="Stretch"
                         VerticalAlignment="Stretch"
                         AutoGenerateColumns="True"
                         IsFilteringAllowed="True">
    </telerik:RadGridView>

и код для mainpage.xaml -

    public partial class MainPage : UserControl
{
    //binding of view model to user control
    public PeopleViewModel PeopleView
    {
        get { return (PeopleViewModel)GetValue(PeopleViewProperty); }
        set { SetValue(PeopleViewProperty, value); }
    }

    // Using a DependencyProperty as the backing store for PeopleView.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty PeopleViewProperty =
        DependencyProperty.Register("PeopleView", typeof(PeopleViewModel), typeof(MainPage), new PropertyMetadata(new PeopleViewModel()));


    public MainPage()
    {
        InitializeComponent();
        this.LayoutRoot.DataContext = PeopleView.AllPeople;  //tried this but no luck
        this.GridView1.ItemsSource = PeopleView.AllPeople; //bound to a grid view for testing returns 

    }

Я вставил сетку только для тестирования, и она прекрасно возвращает значения. Однако я попытался привязать DataContext основного представления к коллекции, чтобы затем заполнить связанные поля либо в пользовательском контроле, либо в тестовом текстовом блоке, который я добавил на главной странице.

Может ли кто-нибудь указать мне правильное направление относительно того, как правильно связать UIElements с коллекцией за пределами ItemsSource. Я всегда делал это для сеток или элементов списка без каких-либо проблем, но теперь, пытаясь представить что-то (отдельное поле в пользовательском интерфейсе), я застреваю. UPDATE:

После короткого умственного перерыва я установил связь, так как я связывал коллекцию, я поместил бы usercontrol в список, вот обновленная главная страница xaml

    <Grid x:Name="LayoutRoot" Background="White">
    <ListBox ItemsSource="{Binding}" Margin="0,0,0,166">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <uc:AddressContainer />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    <telerik:RadGridView Name="GridView1" Margin="0,140,0,6"
                         HorizontalAlignment="Stretch"
                         VerticalAlignment="Stretch"
                         AutoGenerateColumns="True"
                         IsFilteringAllowed="True">
    </telerik:RadGridView>

и я обновил контекст данных в файле mainpage.xaml.cs до

        public MainPage()
    {
        InitializeComponent();
        this.DataContext = PeopleView.AllPeople;  //updated here  
    }

Я получаю точный возврат записей (2) в поле списка, однако в пользовательском элементе управления (поля содержимого) по-прежнему не выполняется привязка для отображения значений, возвращаемых в коллекции

Любые указатели все равно будут оценены.

1 Ответ

2 голосов
/ 05 мая 2011

Нашел ответ. В предыдущем тестировании я установил источник данных в UserControl для базовой модели. Не спрашивайте почему ... но эта привязка переопределяет привязку, установленную на главной странице. После удаления этой ссылки на данные пользовательский интерфейс теперь правильно связывает пользовательский элемент управления с коллекцией.

...