2016-11-17 5 views
0

저는 WPF를 처음 접했습니다. MVVM에서 컨트롤을 동적으로 만들려고하지만 컨트롤이 뷰에 렌더링되지 않습니다. 나는 몇 개의 라벨과 텍스트 박스가 생성되도록하고 싶다.MVVM에서 동적으로 컨트롤 만들기

아래는 내 코드입니다 :

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

    public string KeyValue 
    { 
     get; 
     set; 
    } 
} 

모델 뷰 코드

모델 코드

<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> 

보기 렌더링 (사용자 컨트롤입니다)

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); 

    } 
} 

코드보기, 나는 비어있는 것을 볼 수있다. 텍스트 상자. 나는 무엇이 잘못되었는지 이해할 수 없다. ..? 내 의견으로 당

+4

당신은 추가하지 않습니다

DataTemplateDataContext으로 개별 항목을 수신, 따라서 당신은 단지처럼 바인딩 경로 내에서 항목 수준 속성 이름을 포함해야 'propertiesList' 콜렉션에있는 것. – dymanoid

+0

'MyModel.Add (m);'와트. 디버거로 코드를 단계별로 실행할 때 도움이됩니다. https://msdn.microsoft.com/en-us/library/sc65sadd.aspx – Will

+0

는 propertiesList에 항목을 추가했지만 여전히 효과가 없습니다. 여전히 문제는 동일합니다. –

답변

2

:

<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 path error :' – Tomtom