2011-12-21 13 views
0

ListBoxがあります。ここではIList Like(Cities)をバインドしています。ListBoxのオブジェクトをWindows Phone7でListBoxで検索する方法

Windows Phone7の.NETでOnItemDataBoundのようなイベントが必要です。

すべての都市がバインドされているように(このイベントは10都市ある場合は10回発射されます)、このイベントは発生しますので、このイベントでさらに計算を行う必要があります。このイベントでは、ListItemにバインドされたオブジェクトを見つけて、計算を行うことができます。 .NETのOnItemDataBoundと同様のWP7にイベントがありますか?

lstFlights.ItemsSource = objCities; 

私はイベントがいくつかのリスト項目を移入するすべての都市をバインド上(のように:私はなど、テキストブロックのテキストを変更したい)によると、私は以下のようなデータを結合してい

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

ListItemにバインドされたCity。これを行うには、WP7でOnItemDataBoundのようなイベントが必要です。そして私は、リストピッカー以下のように持っている:

SelectionChangedイベントで

はまた、私は、リストの項目を変更したいです。

そして私はFindName指定を行う必要があり、リストボックス内の任意のTextBlockを変更したい場合のIList(objCities)はサービスから来ているもう一つのことは、私はとてもそのオブジェクト を変更することはできませんし、私は計算値を割り当てる必要がありますすべての都市が縛られています。

+0

リストにバインドする前に計算を実行できないのはなぜですか? – ChristiaanV

+0

私はサービスから取得している応答は非常に複雑なので、私はそれをバインドした後に計算したいと思います。また、私はListPickerを持って、選択の変更にもListBoxの計算を変更する必要があります。そのため、私はOnItemDataBoundイベントが必要です。そのようなイベントがあるかどうかを教えてください。 –

+1

あなたは今持っているものを見せてもらえますか?私はOnItemDataBoundイベントを認識していませんが、選択の変更に対しては、selectionchangedイベントを使用して、ユーザー選択の計算を行う必要がある状況を処理できます。 – ChristiaanV

答えて

1

CollectionChangedイベントは、追加/削除された新しい要素のObservableCollectionコレクションにあります。

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); 
     } 
    } 
} 
+0

応答Ku6oprありがとう。しかし、私はObservableCollectionをMy appに持っていません。私はIListを持っており、ItemsSourceを使ってリストボックスをバインドしています。ここでは、OnItemDataBoundのようなイベントが必要です。 –

1

どのようにあなたのListBoxItemContainerGeneratorの代わりItemsChangedイベントの使用方法については?

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) 
    ... 
+0

返信Xinに感謝します。しかし、ここで私はどのように私のListItemsを見つけることができます、例えば、私はそのテキストボックスのリストボックスにTextBlockを持っている私は価格をバインドする必要があるので、これについてはいくつかの計算を行い、私は価格を得るが、どのように私はこのイベントでTextBlockを見つけることができます。私たちは、OnItemDataBoundイベントで以下のようにします:RepeaterItem item =(RepeaterItem)e.Item; 都市city =(都市)item.DataItem; リテラルlitPrice =(リテラル)item.FindControl( "litPrice"); ItemsChangedイベントの –

+0

: 'DependencyObject listitem = list.ItemContainerGenerator.ContainerFromIndex(e.Position.Index + e.Position.Offset);' 'DependencyObject child = VisualTreeHelper.GetChild(listitem、0);'など... – Ku6opr

+0

返信Ku6oprのおかげで。しかし、私はDependencyObjectを使用してlistitemを見つけることができませんlistitem = list.ItemContainerGenerator.ContainerFromIndex(e.Position.Index + e.Position.Offset); listitem私はnullとして取得しています。 –

関連する問題