2014-02-09 3 views
0

Я с помощью JSON веб-сервер для извлечения данных и поместить его в ObservableCollection, что я связываю его в мой XAML, поэтому я хочу, чтобы показать индекс какBinding индекс ObservableCollection

  1. хххх
  2. ххххххх

Как я могу получить номер 1, 2 и так далее?

ответ

2

Если вы используете DataGrid то в таком случае Вам необходимо включить DisplayRowNumber собственности и в LoadingRow случае DataGrid вы можете установить Row.Header со свойством индекса. Код может быть как

<DataGrid Name="dataGrid" LoadingRow="OnLoadingRow" behaviors:DataGridBehavior.DisplayRowNumber="True" ItemsSource="{Your Binding}" /> 

void OnLoadingRow(object sender, DataGridRowEventArgs e) 
{ 
    e.Row.Header = (e.Row.GetIndex() + 1).ToString(); 
} 

Edit: Как вы хотите это для ListBox, поэтому я предлагаю вам, пожалуйста, проверьте this решение. В этом случае пользователь создает поле Индекс и привязывает его к ListBox.

Index = myCollection.ToList().IndexOf(e) 

Также вы можете отметить сообщение Hannes в блоге. Он демонстрирует пример для Silverlight, но он будет работать и с WPF.

+0

нет, я хочу использовать его в моем ListBox, а также в моей карте Pushpin – user2303963

+0

Я обновил свой ответ. Пожалуйста, проверьте –

0

Вы можете сделать это, используя IMultiValueConverter который вернет индекс.

XAML

<ListBox x:Name="listBox" ItemsSource="{Binding YourCollection}"> 
    <ListBox.Resources> 
    <local:RowIndexConverter x:Key="RowIndexConverter"/> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock> 
     <TextBlock.Text> 
      <MultiBinding Converter="{StaticResource RowIndexConverter}"> 
       <Binding/> 
       <Binding ElementName="listBox" Path="ItemsSource"/> 
      </MultiBinding> 
     </TextBlock.Text> 
     </TextBlock> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

конвертер:

public class RowIndexConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, 
          System.Globalization.CultureInfo culture) 
    { 
     IList list = (IList)values[1]; 
     return list.IndexOf(values[0]).ToString(); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, 
           object parameter, 
           System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

. Извините, но я не понимаю эту часть. {Binding RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = ListBoxItem} – user2303963

+0

Нам нужно передать конвертер 'ListBoxItem', чтобы мы могли найти его индекс в ListBox. ListBoxItem является визуальным родителем TextBlock, поэтому с RealtiveSource мы говорим об обязательном движке для перемещения по визуальному дереву, чтобы получить родительский ListBoxItem и передать его конвертеру. Подробнее об этом читайте здесь [http://msdn.microsoft.com/en-us/library/ms743599 (v = vs.110) .aspx). –

+0

Но у меня есть свойство error не существует – user2303963

Смежные вопросы