Binding Converter, использующий индекс элемента в списке - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть сценарий, который требует от меня привязать список объектов к сетке. Мне бы хотелось, чтобы такое поведение было таким: -

• Когда элемент добавляется в список, он перемещается к следующему доступному месту в сетке. (как оберточная панель)

Ниже показан мой текущий XAML.

<ItemsControl ItemsSource="{Binding Path=Contents}" Grid.Row="1">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <cc:DynamicGrid ShowGridLines="True" RowCount="{Binding Path= SelectedGridStyle.RowCount}" ColCount="{Binding Path=SelectedGridStyle.ColCount}"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel> 
</ItemsControl>

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

 <ItemsControl.ItemContainerStyle>
     <Style>
         <Setter Property="Grid.Column" Value="{Binding Path=ColumnIndex}"/>
         <Setter Property="Grid.Row" Value="{Binding Path=RowIndex}"/>
         <Setter Property="Grid.ColumnSpan" Value="{Binding Path=ColumnSpan}"/>
         <Setter Property="Grid.RowSpan" Value="{Binding Path=RowSpan}"/>
     </Style>
 </ItemsControl.ItemContainerStyle>

У меня есть следующий код, который позволит мне вычислить rowIndex и columnIndex из индекса в списке.

int m_ColumnCount = 3;
int rowIndex = index / m_ColumnCount;
int columnIndex = index - (rowIndex * m_ColumnCount);

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

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Проверьте это - http://www.switchonthecode.com/tutorials/wpf-tutorial-using-multibindings

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

1 голос
/ 06 декабря 2011

Если для привязки требуется более одного значения, вы можете использовать MultiBinding.Для привязки к основной модели представления вы можете использовать RelativeSource с целью ItemsControl.

...