2016-06-14 79 views
1

这让我在过去两周感到困扰,我正在尝试创建一个可以在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(); 

显然,这是不行的,所以我希望有人能指出我正确的方向。我是否需要致电Main.xaml.cs中的method

+0

有没有简单的答案,因为你的例子是离开。没有一个单一的修复,你没有一个合适的绑定,你没有视图模型,你的方法没有返回类型或保存在某个地方...你目前有什么是迄今为止工作,我我建议你从头开始写这个话题,并阅读一本好书或教程,并遵循它。 – nvoigt

+0

@nvoigt,它是在这个问题中,我正在尝试遵循本书Pro C#5.0和.NET 4.5 Framework(.NET中的Expert's Voice)中的内容。我从头开始这么多次。显然是初学者,但我需要一个正确的方向,因为我是在这里自己。 – KyloRen

+0

我不是XAML的专家,但你可能应该以某种方式将东西暴露给世界;)。现在它只存在于ListOfStuff函数中。 – Logman

回答

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"); 
    } 

} 
+0

真棒,这回答了我所有的问题。我无法解决如何“设置”和“设置”集合。你的例子正在我的应用程序中工作。 – KyloRen

+0

绝对的辉煌,我现在能够绑定这个数据与其他控件,如树视图等。再次感谢,这有很大的帮助! – KyloRen

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; 
    } 

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

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

+0

你会如何把这个集合放到一个单独的类中被调用?这就是我真正遇到困难的原因。 – KyloRen

+0

创建一个单独的类,然后在xaml.cs中创建一个实例,然后填充该实例 – kimiko88

+0

谢谢,我会放弃它。 – KyloRen