创建一个类来保存数据绑定的集合?

时间:2016-06-14 15:32:32

标签: c# wpf

过去两周我一直困扰着我,我试图制作一个可以在WPF控件中使用的列表。我似乎无法使代码正确。

我有Pro C# 5.0 and the .NET 4.5 Framework (Expert's Voice in .NET),第9章详细描述了它们是什么以及如何使用它们。但对于我的缺点,我不能为我的生活做我想做的事。

我想做什么。

  • 创建一个类来保存string数据列表
  • 使用该列表通过数据绑定填充WPF控件(在此示例中为组合框)。
  • 提取从列表中选择的字符串。

我做了一个单独的课程,它只会是一个单一的列表BTW。

class CollectionClass
    {
        public static void ListOfStuff()
        {
            List<string> Stuff = new List<string>();
            Stuff.Add("Stuff1");
            Stuff.Add("Stuff2");
            Stuff.Add("Stuff3");
            Stuff.Add("Stuff4");
        }
    }

我的XAML是一个组合框,

<ComboBox Name="NamesComboBox" Background="Yellow" VerticalContentAlignment="Center" Grid.Row="1" Grid.Column="2" Margin="5" 
                          DisplayMemberPath = "Value" SelectedValuePath="Key" 
                          ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged, Path=Stuff}" 
                          SelectedItem="{Binding UpdateSourceTrigger=PropertyChanged, Path=SelectedStuff}"

要调用方法,

CollectionClass.ListOfStuff();

显然这不起作用,所以我希望有人可以指出我正确的方向。我是否需要拨打method中的Main.xaml.cs

2 个答案:

答案 0 :(得分:1)

修复示例的最简单方法是:

像这样创建编辑你的xaml网格:

<Grid>
<ComboBox Name="NamesComboBox" Background="Yellow" VerticalContentAlignment="Center" VerticalAlignment="Center" Margin="5" ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged, Path=Value}">
</ComboBox>
</Grid>

然后像这样编辑文件xaml.cs

        public MainWindow()
    {
        ObservableCollection<string> Stuff = new ObservableCollection<string>();
        Stuff.Add("Stuff1");
        Stuff.Add("Stuff2");
        Stuff.Add("Stuff3");
        Stuff.Add("Stuff4");
        InitializeComponent();
        NamesComboBox.ItemsSource = Stuff;//here you set the itemsSource
        NamesComboBox.SelectionChanged += NamesComboBoxOnSelectionChanged;// or you can create this on xaml like SelectionChanged="NamesComboBoxOnSelectionChanged"
    }

最后创建方法

  private void NamesComboBoxOnSelectionChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs)
    {
        var selectedString = selectionChangedEventArgs.AddedItems;
    }

此变量包含您在组合框中选择的字符串。

有很多方法可以解决你的例子,但在我看来这是最快的

答案 1 :(得分:1)

基于data binding combobox in wpf

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:CollectionClass x:Key="StuffColl"/>
    </Window.Resources>

    <Grid>
        <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="164,137,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding Stuff, Source={StaticResource StuffColl}}" SelectedIndex="0"/>
    </Grid>
</Window>

和班级

public class CollectionClass
{
    public List<string> Stuff { get; set; }

    public CollectionClass()
    {
        Stuff = new List<string>();
        Stuff.Add("A");
        Stuff.Add("B");
        Stuff.Add("C");
        Stuff.Add("D");
    }

}