Привязка данных Silverlight для сбора на панели стека - PullRequest
2 голосов
/ 27 апреля 2010

Я новичок в Silverlight, поэтому у меня нет полного понимания всех элементов управления в моем распоряжении. Я хотел бы использовать привязку данных и модель представления для поддержки коллекции элементов. Вот некоторый макет кода для того, что я хотел бы сделать:

Модель

  public class MyItem
    {
       public string DisplayText { get; set; }
       public bool Enabled { get; set; }
    }

ViewModel

public class MyViewModel : INotifyPropertyChanged
{
      private ObservableCollection<MyItem> _myItems = new ObservableCollection<MyItem>();
      public ObservableCollection<MyItem> MyItems
      {
          get { return _myItems; }
          set 
          { 
               _myItems = value
               NotifyPropertyChanged(this, "MyItems");
           } 
      }  
}

View

<Grid x:Name="LayoutRoot" Background="White">
        <StackPanel ItemsSource="{Binding MyItems}">            
            <StackPanel Orientation="Horizontal">
                <CheckBox "{Binding Enabled, Mode=TwoWay}"></CheckBox>
                <TextBlock Text="{Binding DisplayText, Mode=TwoWay}" />
            </StackPanel>                
        </StackPanel>        
    </Grid>

Итак, моей конечной целью было бы, чтобы каждый раз, когда я добавлял еще одну MyItem в коллекцию MyItems, он создавал новую StackPanel с флажком и текстовым блоком. Мне не нужно использовать панель стека, но я просто решил использовать ее для этого примера.

Ответы [ 2 ]

5 голосов
/ 27 апреля 2010

Похоже, вы хотите <ListBox>, затем установите <ListBox.ItemTemplate> на <StackPanel> как-то так .....

<ListBox ItemsSource=”{Binding Classes, Source={StaticResource model}}”>           
   <ListBox.ItemTemplate>               
      <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox "{Binding Enabled, Mode=TwoWay}"/>
                <TextBlock Text="{Binding DisplayText, Mode=TwoWay}" />
            </StackPanel>  
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

вот отличный пример (это WPF, но должны быть только незначительные изменения для silverlight)

1 голос
/ 27 апреля 2010

да, похоже, что вы хотите <ListBox>

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SilverlightApplication4.MainPage"
Width="640" Height="480">
<UserControl.Resources>
    <DataTemplate x:Key="ItemTemplate">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Enabled, Mode=TwoWay}"/>
            <TextBlock Text="{Binding DisplayText}"/>
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource SampleDataSource}}">
    <ListBox Margin="0,0,8,0" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Collection}"/>
</Grid>

Этот код предоставит вам ListBox со всеми вашими данными, привязанными к флажку, и TextBlock с флажком первым и TextBox рядом с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...