2017-11-10 16 views
0

저는 데이터를 표시하는 데 infragistics와 wpf를 사용하는 응용 프로그램을 개발하고 있습니다. 내 코드는 다음과WPF- 관찰 가능한 컬렉션이있는 XamDatagrid를 바인딩 할 수 없습니다.

<Grid> 
    <ItemsControl x:Name="MyItemContol" ItemsSource="{Binding ViewSetList}" 
VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 

     <ItemsControl.ItemTemplate> 
      <DataTemplate> 

       <igDP:XamDataGrid DataSource="{Binding ViewSetList}" > 
        <igDP:XamDataGrid.FieldLayouts> 
         <igDP:FieldLayout> 
          <igDP:FieldLayout.Fields> 

           <igDP:Field Name="PARAMETER"> 
            <igDP:Field.Settings> 
             <igDP:FieldSettings AllowEdit="False" /> 
            </igDP:Field.Settings> 

           </igDP:Field> 

           <igDP:Field Name="VALUE"> 
            <igDP:Field.Settings> 
             <igDP:FieldSettings AllowEdit="False" /> 
            </igDP:Field.Settings> 
           </igDP:Field> 
           <igDP:Field Name="UNIT"> 
            <igDP:Field.Settings> 
             <igDP:FieldSettings AllowEdit="False" /> 
            </igDP:Field.Settings> 
           </igDP:Field> 
           <igDP:Field Name="INSTANCE"> 
            <igDP:Field.Settings> 
             <igDP:FieldSettings AllowEdit="False" /> 
            </igDP:Field.Settings> 
           </igDP:Field> 

          </igDP:FieldLayout.Fields> 
         </igDP:FieldLayout> 
        </igDP:XamDataGrid.FieldLayouts> 

       </igDP:XamDataGrid> 


      </DataTemplate> 
     </ItemsControl.ItemTemplate> 

    </ItemsControl> 
</Grid> 

처럼 보이는이 XAML 파일은 네 개의 필드 매개 변수, 값, 단위 및 인스턴스가 포함되어 있습니다.

public partial class MainWindow : Window 
    { 
     private ObservableCollection<Parameters> viewSetList = new 
     ObservableCollection<Parameters>(); 

     public MainWindow() 
     { 
     InitializeComponent(); 

     //Add data to the collection 
     viewSetList.Add(new Parameters() { PARAMETER="abc", INSTANCE="def" , UNIT="hhshhd", VALUE="hahha" }); 


    } 


public class Parameters: INotifyPropertyChanged 
{ 
    private string parameterName = string.Empty; 

    public string PARAMETER 
    { 
     get { return parameterName; } 
     set { parameterName = value; } 
    } 
    private string parameterValue = string.Empty; 

    public string VALUE 
    { 
     get { return parameterValue; } 
     set { parameterValue = value; } 
    } 
    private string parameterUnit = string.Empty; 

    public string UNIT 
    { 
     get { return parameterUnit; } 
     set { parameterUnit = value; } 
    } 
    private string instance = string.Empty; 

    public string INSTANCE 
    { 
     get { return instance; } 
     set { instance = value; } 
    }  

    public event PropertyChangedEventHandler PropertyChanged; 
    private void onPropertyChanged(object sender, string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      PropertyChanged(sender, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

실행하면 빈 화면 만 표시됩니다. 그러나 ItemsSource = "{Binding ViewSetList}"xaml 파일에 포함되어 있습니다. 왜 바인딩이 일어나지 않는지 말해 줄 수 있습니까?

바인딩 XamDataGrid도 필요합니까?

도움을 주실 수 있습니다.

감사

+0

코드에 문제가 너무 많아서 좋은 [mcve]를 제공하지 않으므로 실제 답변을 제공하는 것은 실용적이지 않습니다. 그러나 : 속성에만 바인딩 할 수 있습니다. 그리고 속성은 공개되어야합니다. 그리고 C#은 대소 문자를 구별하므로'ViewSetList'는'viewSetList'와 같지 않습니다. 그리고 {Binding ViewSetList}는 컨트롤의 _item_ 컨텍스트에서 유효하지 않습니다. 당신은 그 문제에 집중함으로써 시작해야합니다. 여전히 도움이 필요하다면, 좋은 [mcve]를 포함하는 질문을 게시하고 디버깅을 위해 이미 수행 한 작업에 대해 좀 더 구체적이고 –

+0

에 도움이 필요한 항목을 공개하고 viewSetList에 대한 바인딩을 변경했습니다. 하지만 여전히 빈 화면이 나타납니다. –

+0

코드에서 유일한 문제는 아닙니다. 그것들은 내가 이전에 언급 한 유일한 문제조차 아니다. –

답변

0

왜 당신은 ItemsControl 내부 XamDataGrid를 넣어 않았다 ? ItemsControl은 필요하지 않습니다.

자체에 윈도우의 DataContext 그것을 제거하고 ViewSetList공공 재산을 만들고 설정 :

public partial class MainWindow : Window 
{ 
    private ObservableCollection<Parameters> _viewSetList = new ObservableCollection<Parameters>(); 
    public ObservableCollection<Parameters> ViewSetList { get { return _viewSetList; } } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     //Add data to the collection 
     _viewSetList.Add(new Parameters() { PARAMETER = "abc", INSTANCE = "def", UNIT = "hhshhd", VALUE = "hahha" }); 

     DataContext = this; 
    } 
} 

당신은 다음 속성에 XamDataGrid을 결합 할 수 있습니다

<Grid> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <igDP:XamDataGrid DataSource="{Binding ViewSetList}" > 
       <igDP:XamDataGrid.FieldLayouts> 
        <igDP:FieldLayout> 
         <igDP:FieldLayout.Fields> 
          <igDP:Field Name="PARAMETER"> 
           <igDP:Field.Settings> 
            <igDP:FieldSettings AllowEdit="False" /> 
           </igDP:Field.Settings> 
          </igDP:Field> 
          <igDP:Field Name="VALUE"> 
           <igDP:Field.Settings> 
            <igDP:FieldSettings AllowEdit="False" /> 
           </igDP:Field.Settings> 
          </igDP:Field> 
          <igDP:Field Name="UNIT"> 
           <igDP:Field.Settings> 
            <igDP:FieldSettings AllowEdit="False" /> 
           </igDP:Field.Settings> 
          </igDP:Field> 
          <igDP:Field Name="INSTANCE"> 
           <igDP:Field.Settings> 
            <igDP:FieldSettings AllowEdit="False" /> 
           </igDP:Field.Settings> 
          </igDP:Field> 

         </igDP:FieldLayout.Fields> 
        </igDP:FieldLayout> 
       </igDP:XamDataGrid.FieldLayouts> 
      </igDP:XamDataGrid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</Grid> 

당신은 할 수 없습니다 비공개 필드에 바인드합니다.

+0

@sampatnayak : 도움이되는 답변은 다음과 같습니다. https://stackoverflow.com/help/someone-answers – mm8