Связанная таблица декларативной привязки данных в wpf / xaml - PullRequest
0 голосов
/ 15 октября 2011

Я работал над очень небольшим проектом WPF, чтобы ознакомиться с ним, пока я читаю книгу Натана.Я пытаюсь сделать декларативное связывание для одного окна с несколькими таблицами из одного набора данных.Схема (имена были изменены, чтобы защитить невинных): tblMany2 - tblOne - tblMany1

XAML ниже, но вкратце:

  • Я задаю текст данных вобработчик Windows _loaded.Я пробовал как набор данных, так и таблицу, которая концептуально является основной таблицей (tblMany1).
  • Я установил ItemSource в поле со списком tblMany1.
  • Я установил ItemSource наВторое поле со списком в отношении данных внешнего ключа (первоначально это был tbo, но я некоторое время работал).
  • Идея состоит в том, чтобы управлять вторым полем со списком (и другими элементами управления), изменяяfirst.
  • Результатом до сих пор является пустая запись во втором комбинированном окне с выводом отладки, в котором говорится, что не удается найти свойство любого объекта, для которого я установил ItemsSource.

XAML:

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace;system;assembly=mscorlib"
mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:my="clr-namespace:MyProject"
xmlns:dx="clr-namespace:System.Diagnostics;assembly=WindowsBase" 
    Height="500"
    Width="700"
    d:DesignHeight="350" d:DesignWidth="525" SizeToContent="WidthAndHeight">

<Window.Resources>
    <!--Data-->


    <!--Styles-->
    <Style x:Key="buttonStyle">
        <Setter Property="Button.Width" Value="85" />
        <Setter Property="Button.Height" Value="30" />
    </Style>
    <Style x:Key="chkImageStyle" TargetType="Image">
        <Setter Property="Image.Height" Value="25" />
        <Setter Property="Image.Width" Value="30" />
        <Setter Property="Image.Margin" Value="100,30,0,0" />
        <Setter Property="Image.Stretch" Value="Fill" />
        <Setter Property="Image.VerticalAlignment" Value="Top" />
        <Setter Property="Grid.Column" Value="1" />
        <Setter Property="Image.Source" Value="checkmark.jpg" />
        <Setter Property="Image.Visibility" Value="hidden" />
    </Style>

    <!--Data Tempaltes-->
    <DataTemplate x:Key="tblMany1Date">
        <TextBlock Text="{Binding Path=tblMany1Date, StringFormat=d,dx:PresentationTraceSources.TraceLevel=High}" />
    </DataTemplate>

    <DataTemplate x:Key="tblOneLink">
        <TextBlock HorizontalAlignment="Center">
            <Hyperlink NavigateUri="{Binding Path=tblOne.Link}">
                <Run Text="{Binding Path=tblOne.Name}" />
            </Hyperlink>
        </TextBlock>
    </DataTemplate>

</Window.Resources>

<Viewbox Stretch="Uniform" Height="500" Width="750">
    <!-- Main Dockpanel-->
    <DockPanel Name="DockPanel1">

        <!-- NavPane -->
        <StackPanel Height="315" Background ="LightBlue" DockPanel.Dock="Left" Name="StackPanel1" Width="135">
            <Button Margin="5" Content="New" Name="btnNewOne" Style="{StaticResource buttonStyle}"/>
            <Label Margin="0" Content="ManyDate:" Name="lblDate" />

            <!--Primary Control-->
            <ComboBox Margin ="0" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=tblMany1}"
                  ItemTemplate="{StaticResource tblMany1Date}" Height="23" Name="cboDate" Width="120"
          ForceCursor="False" AllowDrop="False" />

            <TextBlock Margin="-5" Visibility="Hidden"/>

            <Label Margin="0" Content="OneName:" Name="lblOneName" />

            <ComboBox Margin="0" ItemsSource="{Binding FK_tblMany1_tblOne}"
                ItemTemplate="{StaticResource tblOneLink}" Name="cboOne" />

        </StackPanel>
    </DockPanel>
</Viewbox>

Ответы [ 2 ]

0 голосов
/ 17 октября 2011

Что-то, чего я не знал: важность настроек родитель-потомок в конструкторе наборов данных.Я предполагал, что, переворачивая их, я бы тоже перевернул отношения.Однако это не так.Проблема всегда заключалась в том, что свойство навигации / отношения между tblMany1 и tblOne было определено по умолчанию в противоположность концептуальной ситуации.

Благодаря vorrtex для критической информации о синтаксисе "/".

0 голосов
/ 16 октября 2011

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

Вы можете достичь этого любым способом (изменить текст данных):

<ComboBox DataContext="{Binding SelectedItem, ElementName=cboDate}" Margin="0" ItemsSource="{Binding FK_tblMany1_tblOne}"
            ItemTemplate="{StaticResource tblOneLink}" Name="cboOne" />

Или так:

<ComboBox Margin="0" ItemsSource="{Binding tblMany1/FK_tblMany1_tblOne}"
            ItemTemplate="{StaticResource tblOneLink}" Name="cboOne" />

Знак косой черты в коде tblMany1/FK_tblMany1_tblOne указывает, что привязка получает текущий элемент коллекции tblMany1, а затем принимает свойство FK_tblMany1_tblOne этого элемента.

Редактировать Поскольку существует только две таблицы и вы хотите отобразить одну и ту же коллекцию (но с разными полями), правильный код может выглядеть так:

<ComboBox Margin="0" ItemsSource="{Binding tblMany1}"
            ItemTemplate="{StaticResource tblOneLink}" Name="cboOne" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...