2013-03-07 11 views
1

제목이별로 도움이되지 않을 수도 있지만 여기에 제 문제가 있습니다. 나는 SILVERLIGHT의 컨트롤 사이에 바인딩 속성에 문제가 있습니다. 다음과 같은 구조가 있습니다 :바인딩 속성이 작동하지 않습니다.

  1. "ProjectItemList"라는 컨트롤이 있습니다.이 컨트롤은 문자열을 받아 매우 간단한 방식으로 표시합니다.
  2. "ProjectList"라는 컨트롤이 있습니다.이 컨트롤은 문자열 배열을 사용하고 "ProjectItemList"컨트롤을 사용하여 배열의 각 문자열을 나타냅니다.
  3. "ProjectWindow"라는 창이 있습니다.이 창에는 "ProjectList"컨트롤과 "Nombres"라는 종속성 속성이 있습니다.

컨텍스트 다음 "ProjectWindow"창이 의존성 ProjectWindow의 종속성 속성 "Nombres"및 종속성 속성 "ListOfNames"사이의 바인딩은 여기서 "ListOfNames"의 코드이다 존재하는 "ProjectList"제어를 포함 특성 :

public static DependencyProperty ListOfNamesProperty = 
     DependencyProperty.Register("ListOfNames", typeof(string[]), typeof(ProjectList), new PropertyMetadata(null)); 
public string[] ListOfNames 
{ 
    get 
    { 
     return (string[])GetValue(ListOfNamesProperty); 
    } 

    set 
    { 
     SetValue(ListOfNamesProperty, value); 
     List<ProjectItemList> auxList = new List<ProjectItemList>(); 
     foreach (string s in value) 
     { 
     ProjectItemList il = new ProjectItemList(); 
     il.Nombre = s; 
     this.lb_projects.Items.Add(il); 
     } 
    } 
} 
문제는 "ProjectList"의 목록 컨트롤이 "Nombres"속성을 표현하지만,이 "ListOfNames"의 "설정"을 호출되지 않습니다, 그래서이 각을 만들 수 있다는 것이다

"ProjectItemList"개체 및 데이터를 나타냅니다.

저는 XAML과 Silverlight에 대해 상당히 새롭기 때문에 간단한 것을 고려하지 않을 수도 있습니다.

감사합니다.

답변

0

당신은 속성의 변경을 감시하기 위해서 콜백을 지정해야합니다

public static DependencyProperty ListOfNamesProperty = 
    DependencyProperty.Register("ListOfNames", typeof(string[]), typeof(ProjectList), 
    new PropertyMetadata(ListOfNamesChaned)); 

private static void ListOfNamesChaned(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    List<ProjectItemList> auxList = new List<ProjectItemList>(); 
    foreach (string s in value) 
    { 
     ProjectItemList il = new ProjectItemList(); 
     il.Nombre = s; 
     this.lb_projects.Items.Add(il); 
    } 
} 

public string[] ListOfNames 
{ 
    get 
    { 
     return (string[])GetValue(ListOfNamesProperty); 
    } 

    set 
    { 
     SetValue(ListOfNamesProperty, value); 
    } 
} 

참조 첸 Kinnrot의 대답

는 이유를 알고. 이 달성하기 위해

1

종속성 속성을 사용할 때 set 및 get은 ui 바인딩을 통해 호출되지 않습니다. 이것이 문제입니다. WPF UI는 getter 및 setter를 거치지 않고 dependly 속성을 사용하여 tald를 직접 제어합니다.

+0

MMM 알겠습니다.이 문제를 해결할 수있는 방법을 알고 계십니까? –

+0

오류가 아니므로 변경 사항에 바인딩하고 논리를 수행하면 메타 데이터를 통해 강제 값 차단 점 또는 속성 변경 처리기를 사용할 수 있습니다. –

0

, 코드 조각 같은이며, 속성 변경 이벤트가하여 PropertyChanged 이벤트 핸들러 즉 사용할 수 있습니다 올립니다 :

  public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

사용이 속성을 바인딩 OnPropertyChanged를하고 property.it의 변화하는 경우 알림을 보내고 바인딩 속성이 자동으로 변경되고 이러한 속성에 바인딩 된 UI가 업데이트됩니다.

관련 문제