#wpf
#wpf #привязка данных #mvvm #прикрепленный-свойства
Вопрос:
Надеюсь, это не обман.
Я хотел бы иметь возможность выполнить следующее в XAML:
<DataTemplate DataType="{x:Type TestApp:ButtonVM}">
<Button
Grid.Column="{Binding GridColumn}"
Grid.Row="{Binding GridRow}"
Content="{Binding Path=Info}"
/>
</DataTemplate>
Привязка содержимого работает нормально, но сетка.Столбец и сетка.Строка просто не существует в созданном объекте. Даже когда я устанавливаю для них какое-то значение без привязки (например, в Grid.Столбец =»1″). Я проверил приложение и увидел, что внутри моей сетки никто никогда не устанавливает сетку.Столбец и Grid.Row.
Есть идеи?
Комментарии:
1. Как вы помещаете свои объекты ButtonVM в сетку? Сетка не является элементом управления items и поэтому не будет принимать произвольные объекты модели представления в качестве своих дочерних элементов.
2. Смотрите ниже, мне удалось сделать это самому. Секрет в том, чтобы использовать ItemsControl . ItemContainerStyle и использовать установщики там, чтобы внедрить привязку в шаблонный дочерний элемент.
Ответ №1:
Решил это сам с помощью блогов.
Насколько я понимаю, вы просто не можете выполнить привязку прикрепленного свойства внутри.
Следующее решает проблему мгновенно (ItemContainerStyle!):
<DataTemplate DataType="{x:Type TestApp:GridVM}">
<ItemsControl ItemsSource="{Binding Path=Children}">
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding GridRow}" />
<Setter Property="Grid.Column" Value="{Binding GridColumn}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid ShowGridLines="True" Style="{Binding Path=Style}">
<Grid.RowDefinitions>
<RowDefinition Height=".5*" />
<RowDefinition Height=".5*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".5*" />
<ColumnDefinition Width=".5*" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
Комментарии:
1. Ах да. Это должно сработать. Прикрепленная сетка. Строка должна быть непосредственным дочерним элементом сетки.
2. У нас было много проблем с этим, и мы перепробовали много других решений, и это было единственное, которое сработало!!!