私はWPFでうまくいくMVVMパターンについて少し読んで始めます。それ以外の場合、私は水平スタックパネルとscrollviewerの代わりにListViewを使用します。自分のデータが横方向よりも縦方向に伸びることを望みます。使用するサンプルコードをいくつか示します。
はここにあなたのモデルクラスだ:
public enum CustomOption
{
Option1,
Option2,
Option3
}
public class Item
{
public string Value1 { get; set; }
public string Value2 { get; set; }
public string Value3 { get; set; }
CustomOption Option { get; set; }
}
ここにあなたのViewModelです:
public class MainWindowVM
{
public ObservableCollection<Item> Items { get; set; }
}
そしてここでは、あなたのメインウィンドウです:
<ScrollViewer
<ListView ItemsSource="{Binding Items}">
<ListView.Resources>
<ObjectDataProvider x:Key="EnumValues" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:CustomOption"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</ListView.Resources>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Value1" Margin="5"/>
<TextBox Text="{Binding Value1}" Margin="2"/>
<TextBlock Text="Value2" Margin="5"/>
<TextBox Text="{Binding Value2}" Margin="2"/>
<TextBlock Text="Value3" Margin="5"/>
<TextBox Text="{Binding Value3}" Margin="2"/>
<TextBlock Text="Option" Margin="5"/>
<ComboBox ItemsSource="{Binding Source ={StaticResource EnumValues}}" SelectedItem="{Binding Option}" Margin="5"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ScrollViewer>
これは、あなたが始めるために非常に単純化した例です。あなたはもっとよく見えるスタイルとレイアウトを得るために遊ぶことができます。私は嫌いなRadioButtonsの代わりにComboBoxを使用しました。また、MainWindowのDataContextをMainWindowVMとして設定する必要があります。今のところあなたのアプリケーションが始まるときにそれを行うことができます。
1. "UserControl用に.xamlを作成する必要がありますか?"はい、UserControlはXAMLとコードで構成されています。 2. ItemsControlのItemTemplateにUserControlを配置します。このようにして、DataContextはItemsControlのItemsSourceプロパティがバインドされているアイテムコレクションの適切なデータアイテムにバインドされます。 3. ItemsControlのItemsPanelには、水平のStackPanelを使用します。 4. ItemsControlをScrollViewerに配置します。 – Clemens
@Clemensそれほど頼もしいことがなければ、ItemsControlのXAMLの外観を教えてください。 –
[データテンプレートの概要](https://msdn.microsoft.com/en-us/library/ms742521(v = vs.100).aspx)を参照してください。 – Clemens