Нет данных с ListBox с сеткой внутри - PullRequest
0 голосов
/ 22 декабря 2011

Я делаю Grid из двух столбцов, которые находятся внутри ListBox.Что после этого я могу DataBind двух столбцов повторять по вертикали.

Пока что приведенный ниже код ничего не показывает на эмуляторе WP7.

<ListBox Background="Yellow" ItemsSource="{Binding}" Height="100" Margin="0,0,8,0">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="100">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="200" />
</Grid.ColumnDefinitions>
<TextBlock Text="Channels" HorizontalAlignment="Stretch" Foreground="Black" Grid.Column="0" />
<TextBlock Text="Antenna" HorizontalAlignment="Stretch" Foreground="Black" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Пожалуйста, помогите мне.

Ответы [ 2 ]

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

Если вам нужен источник элементов времени разработки, вы можете использовать свойство IsInDesignMode следующим образом:

 if (System.ComponentModel.DesignerProperties.IsInDesignTool)
            {
                myListBox.ItemsSource = GenerateMockItems();
            }
            else
            {
                myListBox.ItemsSource = GetRealItems();
            }

в MVVMLight ViewModels, это сокращенное обозначение как

    if (IsInDesignMode)
    {

    }

Точно так же, поскольку похоже, что вы устанавливаете ваш ItemsSource в xaml, внутри вашего класса, который является вашим DataContext, вы можете сделать что-то вроде

public class MyViewModel
{
  public MyViewModel()
  {
     if (System.ComponentModel.DesignerProperties.IsInDesignTool)
                {
                    Items = GenerateMockItems();
                    EditTime = GenerateRandomFutureDate();
                }
                else
                {
                   //whatever you expect should happen in runtime
                }
  }

  //what list is binding to
  public ObservableCollection<Item> Items { get; set; }

   //other properties.. for example
   public bool HasItems { get { return Items != null && Items.Count > 0; } }

   public DateTime EditDate { get; set; }

   private ObservableCollection<Item> GenerateMockItems()
  {
      var collection = new ObservableCollection<Item>();
      for (int i = 0; i < 10; i++)
      {
          collection.Add(new Item() { Name="sdfsdfs" , Channel=i });
      }
      return collection;
  }
  private DateTime GenerateRandomFutureDate()
  {
      return DateTime.Now.AddSeconds(new Random().Next(0,50000));
  }
}
1 голос
/ 22 декабря 2011

Если вас беспокоит только то, что вы видите ItemTemplate в действии, вы можете предоставить явные элементы, не относящиеся к пользовательскому интерфейсу, следующим образом:

<ListBox Background="Yellow" Height="100" Margin="0,0,8,0" xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Height="30">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="200" />
                    <ColumnDefinition Width="200" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="Channels" HorizontalAlignment="Stretch" Foreground="Black" Grid.Column="0" />
                <TextBlock Text="Antenna" HorizontalAlignment="Stretch" Foreground="Black" Grid.Column="1"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <sys:String>1111111</sys:String>
    <sys:String>2222222</sys:String>
    <sys:String>3333333</sys:String>
</ListBox>

Примечания:

  • Я удалил ItemsSource и предоставил элементы явно.
  • Элементы не должны быть производными от UIElement, поэтому они должны быть шаблонными. (Элементы UIE просто рисуются, а шаблон игнорируется.)
  • Я добавил системное пространство имен, чтобы можно было указывать строковые объекты.
  • Я уменьшил высоту ItemTemplate, чтобы было видно более одной строки списка.

Более простое решение: Дайте ListBox имя и удалите привязку:

<ListBox x:Name="myLB" Background="Yellow" Height="100" Margin="0,0,8,0"> 

Затем используйте эту строку в коде (после вызова InitializeComponent ()):

myLB.ItemsSource = new List<string> { "First", "Second", "Third" };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...