My ViewModel имеет свойства типа MultipleSelectionInfo, которые выглядят следующим образом (я удалил связанный код PropertyChanged для ясности, но мои работы по связыванию):WPF - Как добавить текстовое поле на панель, содержащую элементы ItemsControl
public abstract class MultipleSelectionInfo
{
// A SelectableObject is made of a bool IsSelected and a string ObjectData
public ObservableCollection<SelectableObject<string>> Items
{ get; set; }
public string Others
{ get; set; }
}
отобразить эти свойства так:
Моя XAML выглядит следующим образом:
<DataTemplate x:Key="PrepControl">
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Left">
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding ObjectData}" IsChecked="{Binding IsSelected}" Margin="0,6,8,0"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBox MaxWidth="400" MinWidth="100"
MaxHeight="20" Text="{Binding Others}" IsEnabled="{Binding IsOthersSelected}"
HorizontalAlignment="Left"/>
</WrapPanel>
</DataTemplate>
Подводя итог, я показываю элементы MultipleSelectionInfo в ItemsControl (горизонтальный WrapPanel), затем я показываю TextBox. Наконец, я завершаю все в горизонтальной WrapPanel.
Проблема с этим заключается в том, что TextBox не выравнивается хорошо с элементами из-за WrapPanels. В идеале, если бы я мог добавить TextBox внутри WrapPanel элемента ItemsControl, это исправило бы его. Но я не мог этого сделать.
Возможно ли это? Как мне это сделать? Я бы с удовольствием избегал манипулирования элементами управления/панелями программным способом. Если мне действительно нужно, я не очень хорошо знаком с MVVM, не могли бы вы объяснить?
ItemsSource является 'ObservableCollection и DataTemplate' деталей использует '{Binding ObjectData}' и '{Binding IsSelected}'. Он не должен работать –
ASh
Вы правы. Я упростил код для лучшей читаемости. Позвольте мне обновить. – corentinaltepe