C#WPF通过XAML动态创建和绑定组合框

C#WPF通过XAML动态创建和绑定组合框,c#,wpf,xaml,dynamic,C#,Wpf,Xaml,Dynamic,我对WPF和MVVM比较陌生,现在我遇到了一个问题,到目前为止我还没有找到解决方案。我正在更新一个使用Windows.Forms的旧程序。由于我目前正在阅读和学习WPF,我认为用WPF重做程序是个好主意 我的程序读取一个特殊格式的ASCII文件,并从中创建一个Fragment对象列表。然后,列表将显示在动态创建的GUI中。片段对象如下所示: public class Fragment { public string Name { get; set; } public List&

我对WPF和MVVM比较陌生,现在我遇到了一个问题,到目前为止我还没有找到解决方案。我正在更新一个使用Windows.Forms的旧程序。由于我目前正在阅读和学习WPF,我认为用WPF重做程序是个好主意

我的程序读取一个特殊格式的ASCII文件,并从中创建一个
Fragment
对象列表。然后,列表将显示在动态创建的GUI中。
片段
对象如下所示:

public class Fragment
{
    public string Name { get; set; }

    public List<Value> Values { get; set; }

    public int ActiveIndex { get; set; }
}

public class Value
{
    public string Name { get; set; }

    public int BitValue { get; set; }
}
因此:在第一个StackPanel中,我想将所有
Fragment.Name
显示为标签,在第二个StackPanel中,我想为每个
Fragment
创建一个组合框,其中包含所有
Fragment.Values
,显示
Value.Name
属性。
ActiveIndex
绑定到组合框的SelectedIndex

我完全可以在代码隐藏文件中做到这一点,但这会让我和其他看到这一点的人非常头疼。我理解,在XAML中实现这一点是可能的,但我并不真正了解它是如何实现的。
有谁能给我一个正确的方向,告诉我谁能做出这样的行为?另外,如果有更好的GUI方法来处理这个问题,我完全愿意听取建议。当前版本只是从Windows.Forms版本的工具进行的简单传输。

您可以使用ItemsControl:


使用
ItemsPanel
,您可以告诉
ItemsControl
,GUI元素应该安排在哪种面板中。
ItemTemplate
告诉您ItemsControl中的元素是什么样的

如果您使用的是
可观察集合
,您还可以在运行时添加或删除条目,GUI将自动更新


为了使绑定充分工作,您的类可能还必须强制执行
INotifyPropertyChanged
,并且必须在属性的setter中调用
PropertyChanged
事件。

非常感谢!这让我走上了正确的道路!阅读了一些关于ItemControl的内容并做了一些修改,现在它就像一个魔咒。
<ScrollViewer VerticalScrollBarVisibility="Auto">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <StackPanel Margin="0, 3"></StackPanel>
        <GridSplitter Grid.Column="1" ResizeDirection="Columns" Background="DarkGray" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ResizeBehavior="PreviousAndNext" IsEnabled="True" Width="1"></GridSplitter>
        <StackPanel Grid.Column="2" Margin="0, 3"></StackPanel>
    </Grid>
</ScrollViewer>