Как ограничить выбор ячеек, чтобы исключить столбец в DataGrid? - PullRequest
4 голосов
/ 06 октября 2010

У меня есть элемент управления на основе сетки данных, который дублирует селектор Easing Function в Expression Blend.Это для проекта Easing Function , поэтому вы также будете помогать себе :)

Этот селектор является постоянным приспособлением на экране, чтобы упростить опцию опций, при этом все еще глядядостаточно того, что вы обычно выбираете из выпадающего списка в Blend:

alt text

Мне нужно остановить перемещение текущей ячейки в последний столбец «Заголовок».

Существует ли простой способ ограничения перемещения по столбцам, чтобы можно было выбирать только первые 3 столбца?

Ответы [ 2 ]

3 голосов
/ 06 октября 2010

Я был бы склонен сделать что-то вроде этого: -

 <Grid>
    <Grid.ColumnDefinitions>
       <ColumnDefinition Width="150" />
       <ColumnDefinition Width="50" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
       <RowDefinition />
       <RowDefinition Height="250" />
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Grid.ColumnSpan="2">
       <!-- Heading Text Blocks -->
    </StackPanel>
    <ListBox ItemsSource="{Binding SetOfFunctions}" Grid.Row="1">
       <ListBox.ItemsPanel>
           <ItemsPanelTemplate>
               <toolkit:WrapPanel />
           </ItemsPanelTemplate>
       </ListBox.ItemsPanel>
    </ListBox>
    <ItemsControl ItemsSource="{Binding SetOfFunctionNames}" Grid.Row="1" Grid.Column="1" />
  </Grid>

Это базовая идея скелета, единственным селектором здесь является ListView, соответствующий размер и порядок исходных коллекций достигнут желаемоговнешний вид.

0 голосов
/ 14 октября 2010

Концептуально WPF и SL DataGrid воняет. Все, что требует динамических отношений между строками и столбцами, является хакерским. Например, значение ячейки не может быть вычислено во время выполнения без отражения привязок пользовательского интерфейса и определяется встроенной стратегией DataGrid для отображения значения в ячейке. Предполагается, что столбцы отображают определенный объект в источнике данных, и предполагается, что он знает, как обходить этот источник данных. (Что бы это ни стоило, я доказал это «успешно» (их слова, а не мои) по крайней мере одному поставщику компонентов пользовательского интерфейса WPF, и они могут создать DataGrid, который работает таким образом.) Если вы знакомы с Ext .js, вот как DataGrid работает в этой среде HTML / CSS / JS: DataGrid не знает, что делать с источником данных, вы должны сказать ему, что делать. Все полностью модульно, и существует очень мало жестких связей, которые нельзя переписать без отражения.

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

...