2016-11-17 2 views
0

Я довольно новичок в WPF. Я пытаюсь динамически создавать элементы управления в MVVM, но элементы управления не отображаются в представлении. Я хочу, чтобы некоторое количество ярлыков и текстовых полей было создано на виду.Динамически создавать элементы управления в MVVM

Ниже мой код:

Код модели

public class MyModel 
{ 
    public string KeyName 
    { 
     get; 
     set; 
    } 

    public string KeyValue 
    { 
     get; 
     set; 
    } 
} 

ModelView Код

public class MyViewModel 
{ 
    private ObservableCollection<MyModel> propertiesList = new ObservableCollection<MyModel>(); 
    public CustomWriterViewModel() 
    { 

     GetMyProperties() 

    } 


    public ObservableCollection<MyModel> Properties 
    { 
     get { return propertiesList; } 
    } 

    private void GetMyProperties() 
    { 
     MyModel m = new MyModel(); 
     m.KeyName = "Test Key"; 
     m.KeyValue = "Test Value"; 
     MyModel.Add(m); 

    } 
} 

View Code (который является контроль пользователя)

<Grid> 
    <ItemsControl ItemsSource="{Binding Properties}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate DataType="{x:Type cw:MyModel}"> 
       <StackPanel Orientation="Horizontal"> 
        <Label Margin="10" Content="{Binding Properties.KeyName}"></Label> 
        <TextBox Margin="10" Text="{Binding Properties.KeyValue}" Width="250"></TextBox> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

Когда вид делает, Я могу видеть только пустое текстовое окно. Я не понимаю, что не так.

+4

Вы не добавить все в коллекции 'propertiesList'. – dymanoid

+0

'MyModel.Add (m);' wat. Помогает при прохождении кода с помощью отладчика. https://msdn.microsoft.com/en-us/library/sc65sadd.aspx – Will

+0

добавлен элемент в свойствахList, но все равно никакого эффекта. Тем не менее проблема такая же. –

ответ

2

В соответствии с моим комментарием:

DataTemplate получает отдельный элемент в качестве DataContext, поэтому вам нужно только включить имена свойств на уровне элементов в пределах ваших обязательных путей, таких как:

<DataTemplate DataType="{x:Type cw:MyModel}"> 
    <StackPanel Orientation="Horizontal"> 
     <Label Margin="10" Content="{Binding KeyName}"></Label> 
     <TextBox Margin="10" Text="{Binding KeyValue}" Width="250"></TextBox> 
    </StackPanel> 
</DataTemplate> 
+0

Да. Это сработало. Большое спасибо ... –

+0

Вы можете идентифицировать такие ошибки привязки в окне вывода. Такие ошибки выглядят примерно так: 'System.Windows.Data Error: 40: Ошибка пути BindingExpression:' – Tomtom

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

  • Нет связанных вопросов^_^