Silverlight: Как связать данные общего списка со списком? - PullRequest
0 голосов
/ 21 января 2011

Пожалуйста, прости, я новичок в Silverlight и все еще пытаюсь обернуть голову связыванием данных ...

У меня есть общий список, полученный из класса с использованием LINQ. Список содержит 4 объекта, каждый из которых состоит из свойства Letter (строка - A, B, C и D) и соответствующего свойства Number (целое число - 1, 2, 3 и 4).

В Silverlight у меня есть элемент управления со списком и текстовый блок. Я пытаюсь понять, как:

  1. Свяжите комбинированный список с общим списком, чтобы буквы заполняли комбинированный список
  2. Когда пользователь выбирает букву в поле со списком (скажем, C), соответствующее целочисленное значение (3 для этого примера) отображается в текстовом блоке.

Я пытаюсь заставить его работать с ItemsSource, но никуда не денусь. Любой совет? Я работаю в VB, кстати ...

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 января 2011

Я бы делал это только на 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>

А вот мой код: (EDIT: sry для кода C #)

 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.

TJ

0 голосов
/ 21 января 2011

Я сделал нечто похожее с 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

...