Предоставление шаблона ячейки DataGrid в качестве пользовательского свойства пользовательского элемента управления в Silverlight 4 - PullRequest
1 голос
/ 12 декабря 2011

Я создаю пользовательский пользовательский элемент управления в Silverlight 4. Идея этого элемента заключается в перемещении сетки данных с помощью пейджера со страницы пользователя на элемент управления.В настоящее время сетка данных выглядит следующим образом:

                <sdk:DataGrid x:Name="GridCustomers" Height="300" VerticalAlignment="Top" ItemsSource="{Binding CustomerModelsPagedCollectionView}" AutoGenerateColumns="False" ScrollViewer.VerticalScrollBarVisibility="Visible" IsReadOnly="True" SelectionChanged="GridCustomers_SelectionChanged">
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTextColumn Header="Numer bilingowy" Binding="{Binding BillingNumber}" />
                        <sdk:DataGridTextColumn Header="Nazwa klienta" Binding="{Binding CustomerName}"/>
                        <sdk:DataGridTextColumn Header="Skrócona nazwa" Binding="{Binding ShortCustomerName}"/>
                        <sdk:DataGridTextColumn Header="Kod pocztowy" Binding="{Binding PostalCode}" />
                        <sdk:DataGridTextColumn Header="Miasto" Binding="{Binding City}" />
                        <sdk:DataGridTextColumn Header="Ulica" Binding="{Binding Street}" />
                        <sdk:DataGridTemplateColumn Header="Urządzenia">
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <ComboBox x:Name="DeviceComboBox"  SelectionChanged="DeviceComboBox_SelectionChanged">
                                        <ComboBox.Items>
                                            <ComboBoxItem x:Name="Switch" Content="Switche"/>
                                            <ComboBoxItem x:Name="Firewall" Content="Firewalle"/>
                                            <ComboBoxItem x:Name="Host" Content="Hosty" />
                                        </ComboBox.Items>
                                    </ComboBox>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>
                        </sdk:DataGridTemplateColumn>
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>

Чего я больше всего хотел добиться, кроме удаления повторяющегося кода этой сетки с нескольких страниц, - это гибкости этого элемента управления для определения пользователем этого столбца шаблона.Другими словами, я пытаюсь выставить свойство столбца DataGrid, чтобы можно было добавить разные DataGridTemplateColumns.Поскольку у меня небольшой опыт работы с SL, я провел некоторые исследования, и в соответствии с тем, что я нашел, «присоединенных свойства» - это то, что мне нужно (для этого нужно подтверждение).Я определил DependencyProperty, используя этот учебник. вот так (управляющий код - CustomerControl):

   public static readonly DependencyProperty ColumnTemplateProperty = DependencyProperty.RegisterAttached(
        "ColumnTemplate",
        typeof(DataGridTemplateColumn),
        typeof(CustomerControl),
        null);

public static void SetColumnTemplate(DependencyObject obj, DataGridTemplateColumn column)
{
    obj.SetValue(ColumnTemplateProperty, column);
}

public static DataGridTemplateColumn GetColumnTemplate(DependencyObject obj)
{
    return (DataGridTemplateColumn)obj.GetValue(ColumnTemplateProperty);
}

XAML элемента управления:

        <local:CustomerControl x:Name="temp" >
            <local:CustomerControl.ColumnTemplate>
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox x:Name="DeviceComboBox"  SelectionChanged="DeviceComboBox_SelectionChanged">
                            <ComboBox.Items>
                                <ComboBoxItem x:Name="Switch" Content="Switche"/>
                                <ComboBoxItem x:Name="Firewall" Content="Firewalle"/>
                                <ComboBoxItem x:Name="Host" Content="Hosty" />
                            </ComboBox.Items>
                        </ComboBox>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </local:CustomerControl.ColumnTemplate>
        </local:CustomerControl>

Поскольку я выставил свойство типа 'DataGridTemplateColumn 'Я боролся с остальным объявлением шаблона, оно не изменится, но это не работает :( Я не уверен насчет прикрепленных свойств. Не могли бы вы дать мне несколько советов, как заставить это работать так, как я представил (или долженЯ говорю «вообразил», как я хочу, чтобы это работало.) Возможно ли это? Я осознаю тот факт, что здесь есть некоторые серьезные недостатки, но для справки: ошибки, которые я получаю:

Ошибка 3 Встраиваемое свойство CellTemplate не найдено в типе DataGridTemplateColumn Ошибка 2 Неожиданное свойство в правиле синтаксического анализа PropertyElement :: =. PROPERTYELEMENT Content? ENDTAG

Спасибо за любой указатель;)

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