Как найти объект ListItem в ListBox в Windows Phone7 - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть ListBox, здесь я привязываю IList Like (Cities).

Я хочу событие вроде OnItemDataBound в .NET в Windows Phone7.

Например, когда каждый город был связан (если это 10 городов, это событие сработает 10 раз), это событие сработает, поэтому мне придется сделать еще несколько вычислений для этого события. В этом случае я должен найти объект, связанный с ListItem, чтобы я мог сделать некоторые вычисления. Есть ли в WP7 какое-либо подобное событие OnItemDataBound в .NET.

<ListBox Loaded="lstFlights_Loaded" Height="635" x:Name="lstFlights"   
                         ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.Row="1">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Border CornerRadius="10" Margin="10">
                                <Border.Background>
                                    <ImageBrush ImageSource="../Images/rowbg.png"></ImageBrush>
                                </Border.Background>
//Some data here
     </Border>

                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

Я связываю данные, как показано ниже:

lstFlights.ItemsSource = objCities;

при связывании каждого города. Я хочу, чтобы событие заполняло некоторые элементы списка (например: я хочу изменить текстовый блок и т. Д.) В соответствии с городом, который связан с ListItem. Для этого мне нужно событие как OnItemDataBound в WP7. И у меня есть список выбора, как показано ниже:

В событии SelectionChanged я также хочу изменить элементы списка.

И еще одна вещь IList (objCities) исходит от Сервиса, поэтому я не могу изменить этот Объект поэтому, если я хочу изменить любой текстовый блок в списке, я должен сделать FindName, и мне нужно назначить вычисленное значение для каждого связанного города.

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Как насчет использования ItemsChanged события ваших ListBox ItemContainerGenerator вместо?

this.myListBox.ItemContainerGenerator.ItemsChanged += new System.Windows.Controls.Primitives.ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged);

void ItemContainerGenerator_ItemsChanged(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs e)
{
    if (e.Action == NotifyCollectionChangedAction.Add) 
    ...
1 голос
/ 21 декабря 2011

В коллекции ObservableCollection есть событие CollectionChanged для добавления / удаления новых элементов.

ListBox предоставляет несколько методов для доступа к ListBoxItem.Вы можете видеть их в list.ItemContainerGenerator классе.

. Вы можете использовать его вместе для достижения необходимых результатов.

Существует короткий пример, который показывает, как сделать красный передний план для новых добавленных элементов в некоторыхусловия (даже или нет):

ObservableCollection<string> items = new ObservableCollection<string>();

    public MainPage()
    {
        InitializeComponent();

        items.CollectionChanged += (s, e) =>
        {
            Dispatcher.BeginInvoke(() =>
            {
                if (e.NewItems != null)
                {
                    foreach (var item in e.NewItems)
                    {
                        ListBoxItem listitem = (ListBoxItem)list.ItemContainerGenerator.ContainerFromItem(item);
                        if (DateTime.Parse(listitem.Content.ToString()).Second % 2 == 0)
                        {
                            listitem.Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
                        }
                    }
                }
            });
        };
        list.ItemsSource = items;            
    }

    private void AddButton_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        items.Add(DateTime.Now.ToLongTimeString());
    }

    private void RemoveButton_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        Random rnd = new Random();
        if (items.Count > 0)
        {
            int index = rnd.Next(0, items.Count);
            items.RemoveAt(index);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...