2010-05-04 6 views
2

저는 실버 라이트로 시작하고 있습니다. 기본적으로 저는 다양한 dataGrid와 콤보 박스가있는 실버 라이트 사용자 정의 컨트롤이 있습니다. 해당 항목 소스는 사용자 정의 일반 C# 객체의 속성으로 설정됩니다. 내 문제는 사용자가 목록에서 항목을 선택하면 새 행이 모눈 중 하나에 나타나야한다는 드롭 다운 목록이 있다는 것입니다. 내가하고있는 일은 SelectionChanged 이벤트를 처리하고 사용자 지정 개체의 목록에 새 항목을 추가하고 눈금의 항목 소스를 다시 설정하는 것입니다. 이 doesnt는 작동하는 것처럼 보인다; dataGrid에 행이 추가되지 않았습니다. 그리드에 강제로이 속성에 "다시 바인딩"하는 방법을 알지 못합니다. 종속성 속성에 대해 읽었습니다. 필요한 항목입니까?Silverlight - 속성에 다시 바인딩 하시겠습니까?

모든 포인터는 정말 감사하겠습니다.

답변

3

바인딩 할 목록은 ObservableCollection 유형이어야합니다. 그런 다음 DataGrid에 새 항목이 자동으로 표시됩니다.

2

동일한 목록을 ItemsSource에 할당하면 DataGrid은 동일한 목록을 인식하므로 아무런 문제가 없습니다.

헨릭가 지적 하듯이 여러 항목 컨트롤 등의 DataGrid, ListBox

또한

당신의 "일반 C#을 객체"의 ItemsSource 속성에 바인딩 할 수있는 속성에 대한 Observable<T> 아닌 List<T>을 폭로한다 이러한 속성에 대한 코드 변경 내용을 UI에 자동으로 표시하려면 INotifyPropertyChanged 인터페이스를 구현해야합니다.

1

비교적 쉽게 수행 할 수있는 바인딩 소스를 업데이트하는 것이 좋습니다.

private void ComboBox_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    this.dataGrid.GetBindingExpression(DataGrid.ItemsSource).UpdateSource(); 
} 

이것은 약간의 해킹이지만 당신이 필요로하는 것을 할 것입니다. INotifyPropertyChanged을 구현하는 것도 좋은 제안입니다.

실버 라이트 쇼에 대한 유용한 정보가 있습니다 here

관련 문제