C#WPF通过XAML动态创建和绑定组合框
我对WPF和MVVM比较陌生,现在我遇到了一个问题,到目前为止我还没有找到解决方案。我正在更新一个使用Windows.Forms的旧程序。由于我目前正在阅读和学习WPF,我认为用WPF重做程序是个好主意 我的程序读取一个特殊格式的ASCII文件,并从中创建一个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&
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>