Silverlight:如何将通用列表数据绑定到组合框?

时间:2011-01-21 00:45:21

标签: vb.net silverlight data-binding

请原谅,我是Silverlight的新手,我仍然试图围绕数据绑定...

我有一个使用LINQ从类中获取的通用列表。该列表有4个对象,每个对象由一个Letter属性(字符串 - A,B,C和D)和相应的Number属性(整数 - 1,2,3和4)组成。

在Silverlight中,我有一个组合框控件和一个文本块。我正在试图弄清楚如何:

  1. 将组合框绑定到通用列表,以便字母填充组合框
  2. 当用户选择组合框中的字母(例如C)时,文本块中会显示相应的整数值(本例中为3)。
  3. 我一直在努力让它与ItemsSource一起工作,但我没有到达任何地方。有什么建议?顺便说一下,我在VB工作......

    由于

2 个答案:

答案 0 :(得分:0)

我使用Label和radComboBox(来自Telerik)做了类似的事情。

如果您想通过代码执行此操作,则必须执行以下操作:

'This code is untested but at least it shows the logic

'Step #1, filling the combobox
yourComboBox.ItemsSource = yourList

yourComboBox.SelectedValuePath = "IntegerPropertyName"
yourComboBox.DisplayMemberPath = "StringPropertyName"


'Step #2, binding the TextBlock
Dim binding As System.Windows.Data.Binding = Nothing

binding = New System.Windows.Data.Binding()

binding.Source = yourComboBox
binding.Mode = Data.BindingMode.TwoWay 'Maybe in your case you'll want OneWay
binding.Path = New System.Windows.PropertyPath("SelectedItem.IntegerPropertyName")    
youtTextBlock.SetBinding(TextBlock.TextProperty, binding)

...如果您想直接在XAML中进行,请查看第2步的at this帖子

答案 1 :(得分:0)

我只会在XAML中这样做。这是我的(样本)代码:

<Grid x:Name="LayoutRoot" Background="White">
        <TextBlock Text="{Binding ElementName=MyComboBox, Path=SelectedValue}" VerticalAlignment="Top"/>
        <ComboBox 
            x:Name="MyComboBox"
            ItemsSource="{Binding MyColl}"
            Height="22"
            SelectedValuePath="I"
            DisplayMemberPath="C"/>
    </Grid>

这是我的代码背后:(编辑:sry for c#code)

 public class MyClass
    {
        public int I { get; set; }
        public string C { get; set; }
    }

public partial class MainPage : UserControl
{
    public ObservableCollection<MyClass> MyColl { get; set; }

    public MainPage()
    {
        MyColl = new ObservableCollection<MyClass>();

        MyColl.Add(new MyClass{ C = "A", I = 1});
        MyColl.Add(new MyClass { C = "B", I = 2 });
        MyColl.Add(new MyClass { C = "C", I = 3 });
        MyColl.Add(new MyClass { C = "D", I = 4 });
        DataContext = this;
        InitializeComponent();
    }
}

请记住:这只是一个示例代码。我强烈建议你看一下MVVM(http://jesseliberty.com/2010/05/08/mvvm-its-not-kool-aid-3/)。一个更好的解决方案是将SelectedItem(或选定的值)绑定到ViewModel,然后在TextBlock中引用该值。

BR,

TJ