2016-03-10 3 views
0

В МОФ есть WrapPanel, который привязан к списку классовМОФ WrapPanel привязки к списку

<ScrollViewer Grid.Column="1"> 
     <ItemsControl ItemsSource="{Binding UserEntryItems}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <local:ItemTextEntry/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </ScrollViewer> 

Для каждого элемента в списке, я хочу, чтобы отобразить UserControl.

Пользовательское управление требует знать информацию о отдельном классе, но я не уверен, как связать это.

Так что мой MainView xmal теперь выглядит следующим

 <ItemsControl ItemsSource="{Binding UserEntryItems}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <local:ItemTextEntry LocalUserEntry ="{Binding}"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

Мои UserControl "ItemTextEntry" выглядит следующим образом

public partial class ItemTextEntry : UserControl 
{ 
    public UserEntry LocalUserEntry 
    { 
     get { return (UserEntry)GetValue(LocalUserEntryProperty); } 
     set { SetValue(LocalUserEntryProperty, value); } 
    } 

    public static readonly DependencyProperty LocalUserEntryProperty= DependencyProperty.Register("LocalUserEntry", typeof(UserEntry), 
     typeof(ItemTextEntry), new FrameworkPropertyMetadata(new UserEntry())); 



    public ItemTextEntry() 
    { 
     InitializeComponent(); 
    } 
} 

если я поставить точку останова в "общественном ItemTextEntry()" LocalUserEntry dosnt представляют значения в основном списке

С благодарностью

+0

Что такое 'UserEntryItems' здесь – Gopichandar

+0

его имя списка –

+1

У вас уже есть пользовательский элемент управления * local: ItemTextEntry *. Что вам нужно? – bit

ответ

1

Если UserEntryItem класс имеет свойство Name и ваш UserControl ItemTextEntry имеет свойство зависимостей под названием Text (один, который можно привязать ..), ваш XAML будет выглядеть так:

<ScrollViewer Grid.Column="1"> 
    <ItemsControl ItemsSource="{Binding UserEntryItems}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       // The DataContext here is at the level of each individual item in the UserEntryItems list 
       <local:ItemTextEntry Text="{Binding Name}"/> // This can be used to display the data from the properties in your class 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</ScrollViewer> 
0

ItemTemplate для укладки как содержимое вашего данных объекта появляется при передаче Список товаров.

Предоставленный код должен работать. Не знаю, где ты ошибся.

Позвольте мне разместить образец на основе данного кода для справки.

MainWindow.xaml (как это предусмотрено)

<ScrollViewer Grid.Column="1"> 
     <ItemsControl ItemsSource="{Binding UserEntryItems}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <local:ItemTextEntry/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </ScrollViewer> 

MainWindow.xaml.cs (включает ViewModel)

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     ObservableCollection<MyClass> mc = new ObservableCollection<MyClass>(); 
     mc.Add(new MyClass() { Text1 = "test1", Text2 = "test2" }); 
     mc.Add(new MyClass() { Text1 = "test1", Text2 = "test2" }); 
     mc.Add(new MyClass() { Text1 = "test1", Text2 = "test2" }); 
     mc.Add(new MyClass() { Text1 = "test1", Text2 = "test2" }); 
     mc.Add(new MyClass() { Text1 = "test1", Text2 = "test2" }); 

     MainViewModel mv = new MainViewModel() { UserEntryItems = mc }; 

     this.DataContext = mv; 

    } 
} 

public class MainViewModel 
{ 
    public ObservableCollection<MyClass> UserEntryItems { get; set; } = new ObservableCollection<MyClass>(); 
} 
public class MyClass 
{ 
    public string Text1 { get; set; } 
    public string Text2 { get; set; } 
} 

ItemTextEntry.xaml (образец один)

<Border BorderBrush="Black" BorderThickness="2"> 
    <StackPanel> 
     <TextBox Text="{Binding Text1}"/> 
     <TextBox Text="{Binding Text2}"/> 
    </StackPanel> 
</Border> 
Смежные вопросы