2010-04-01 1 views
1

나는 작업 코드에서 얻은 것으로 보아 왜이 기능이 작동하지 않는지 알 수 없지만, 새로운 수준의 코드를 추가했습니다. 나는 가지고있다. 기본적으로 ViewModel을 목록에 바인딩하면 Items가 컬렉션에 추가 될 때 바인딩이 선택됩니다. 그러나 바인딩 된 항목에 업데이트가 발생하면 업데이트되지 않습니다. 기본적으로 문자열 값이있는 사용자 정의 클래스가 포함 된 ObservableCollection이 있습니다. 해당 문자열 값이 업데이트되면 목록을 업데이트해야합니다.Silverlight Binding - 항목이 추가되었지만 업데이트가 적용되지 않을 때 바인딩합니다.

지금 디버깅 할 때 목록 항목이 올바르게 업데이트되지만 UI에 변경 내용이 반영되지 않습니다. 바운드 항목을 멤버 변수로 설정하고 null로 설정 한 다음 올바른 컬렉션으로 재설정하면 작동하지만 원하는 동작은 아닙니다.

다음은 코드의 모형입니다. 누군가 내가 잘못된 부분을 말할 수 있기를 바랍니다. 또한, 아래 코드의 모든 수준에서 INofityPropertyChanged를 구현하려고 시도했습니다.

public class Class1 
{ 
    public string ItemName; 
} 

public class Class2 
{ 
    private Class2 _items; 

    private Class2() //Singleton 
    { 
      _items = new ObservableCollection<Class1>(); 
    } 

    public ObservableCollection<Class1> Items 
    { 
      get { return _items; } 
      internal set 
      { 
       _items = value; 
      } 
    } 
} 

public class Class3 
{ 

    private Class2 _Class2Instnace; 

    private Class3() 
    { 
      _Class2Instnace = Class2.Instance; 
    } 

    public ObservableCollection<Class1> Items2 
    { 
      get {return _Class2Instnace.Items; } 
    } 
} 

public class MyViewModel : INofityPropertyChanged 
{ 
    private Class3 _myClass3; 

    private MyViewModel() 
    { 
      _myClass3 = new Class3(); 
    } 

    private BindingItems 
    { 
      get { return _myClass3.Items2; } // Binds when adding items but not when a Class1.ItemName gets updated. 
    } 
} 
+0

여기에 싱글 톤 패턴의 시도가 표시되지만 실제로 게시 된 코드는 다소 엉망입니다. 'Class2'의 정적 인스턴스도 아니고 정적 인'Instance' 속성도 없습니다. 그것이 당신의 문제와 무관 한 것은 중요하지 않습니다. – AnthonyWJones

+0

네, 싱글 톤이 작동합니다. 나는 모든 것을 타이핑하는 것 같은 느낌이 들지 않았습니다. 내가 싱글 톤이라고 말하면, 나머지 코드는 거기에 있다고 가정합니다. 나는 그 문제와 관련이 없다고 생각합니다. –

+0

@dw : 나중에 일반적으로 짧은 코드를 게시하거나 구현 세부 사항이 누락되었다는 주석을 명시 적으로 포함하는 것이 가장 좋습니다. 문제가 덜 분명하다면 혼란 스러울 수있어서 정답을 찾기가 어려울 수 있습니다. – AnthonyWJones

답변

2

귀하의 질문에 대한 답변은 Class1 필요 INotifyPropertyChanged을 구현하는 것입니다.

public class Class1 : INotifyPropertyChanged 
{ 
    private string _ItemName; 
    public string ItemName 
    { 
     get { return _ItemName; } 
     set 
     { 
     _ItemName = value; 
     NotifyPropertyChanged("ItemName"); 
     } 
    } 

    private void NotifyPropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(name)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

} 
+0

시도해 보았습니다. "또한 아래 코드의 모든 수준에서 INofityPropertyChanged를 구현하려고 시도했습니다." 다른 아이디어? –

+0

저것을 되찾아주세요, 제가 생각한 바에는 다시 시도하려고합니다. –

+0

그게 다야 ... 두 번째 눈이되어 주셔서 감사합니다. 모든 코드를 통해 저를 간과하게 만들었습니다. 감사합니다 agian! –

관련 문제