请原谅,我是Silverlight的新手,我仍然试图围绕数据绑定...
我有一个使用LINQ从类中获取的通用列表。该列表有4个对象,每个对象由一个Letter属性(字符串 - A,B,C和D)和相应的Number属性(整数 - 1,2,3和4)组成。
在Silverlight中,我有一个组合框控件和一个文本块。我正在试图弄清楚如何:
我一直在努力让它与ItemsSource一起工作,但我没有到达任何地方。有什么建议?顺便说一下,我在VB工作......
由于
答案 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