私の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>
合計すると、ItemsControl(水平WrapPanel)にMultipleSelectionInfoの項目が表示されていますが、TextBoxが表示されます。最後に、全体をWrapPanelでラップします。
この問題は、TextBoxがWrapPanelsのためにアイテムとうまく整列しないという問題があります。理想的には、ItemsControlのWrapPanelの中にTextBoxを追加すると、それが修正されます。しかし、私はそれをすることはできませんでした。
可能ですか?どうすればいいですか?私は喜んでプログラムでコントロール/パネルを操作することを避けるだろう。私が本当にしなければならないことは、私はMVVMにあまり慣れていないので、あなたは説明してくれませんか?あなたは、同じタイプの複数のDataTemplateを持っているときにDataTemplateSelectorを作成し、
のItemsSourceは 'のObservableCollection Items'とDataTemplateを使用してい'{Binding ObjectData}'と '{Binding IsSelected}'を呼び出します。それは仕事をするつもりはありません –
ASh
あなたは正しいです。私はコードを読みやすくするために簡略化しました。私に更新させてください。 – corentinaltepe