2012-07-05 2 views
0

WPF에서 MVVM 패턴을 배우려고하고 있는데 바인딩 및 컬렉션과 관련된 몇 가지 문제가 있습니다. 컬렉션이 바뀌기 때문에 컬렉션 인덱스에 바인딩하는 것을 좋아하지 않습니다.컬렉션의 인덱스를 사용하지 않고 컬렉션에 바인딩하는 방법은 무엇입니까?

내가 가진 MyModelClass : ObservableCollection<MyData>

MyData 클래스는 내 사용자 정보를 보유하는 데에 DataValue라는 속성이 있습니다. 나는 MyModelClassMyData 개체로 채 웁니다. 보기 모델 클래스 (MyViewModel)에서 CurrentDataMyModelClass 유형의 속성이 있습니다.

이 경우 내 바인딩은 콤보 상자로 연결됩니다.

<ComboBox Name="cmbxData" 
    ItemsSource="{Binding Path=CurrentData}" 
    DisplayMemberPath="DataValue" 
    SelectedValuePath="DataValue" 
    SelectedValue="{Binding Path=CurrentData[0].DataValue}"/> 

이 모두 잘 작동하고 MyViewModel 클래스하여 PropertyChanged 알림 인터페이스 설정이 있습니다 같은 바인딩을 보이는 것을 는 여기에있다. 몇 초마다이 정보를 새로 고쳐야합니다. 나는 MyModelClass 내부에 이런 일을 수행하여 컬렉션을 상쾌하게하고

는 : 내가 할 수있는 나는만큼 코드를 제공하기 위해 최선을 시도

MyModelClass CurrentData = MyModelClass.Current; 

: MyViewModel 내부

public Class MyModelClass : ObservableCollection<MyData> 
{ 
    private static MyModelClass current = null; 
    public static MyModelClass Current 
    { 
     get 
     { 
      if(current == null) 
       current = new MyModelClass(); 

      return current; 
     } 
    } 

    private void UpdateModel(MyData newData) 
    { 
     MyModelClass newModel = new MyModelClass(); 
     newModel.Add(newData); 
     current = newModel; 

    } 
} 

이있다 그것을 간단하게 유지하십시오. 더 명확히해야 할 필요가 있으면 알려주십시오. 내 문제를 해결하는 방법에 대한 제안을 해주셔서 감사합니다.

누락 된 경우 : 문제점 : 위의 그림 (SelectedValue="{Binding Path=CurrentData[0].DataValue}")과 같이 인덱스를 사용하지 않고 컬렉션 또는 컬렉션에 표시하려는 값에 바인딩하려면 어떻게합니까? 이 문제를 어떻게 해결할 수 있습니까?

감사합니다,

+0

컬렉션에 하나의 항목 만 원할 때 컬렉션 유형을 구현하는 이유는 무엇입니까? 현재 항목을 원할 경우 현재 항목을 가리키는 다른 속성이 필요합니다. – Charleh

+0

이것은 나에게 혼란 스럽다는 것에 동의하지만, 그 속성이 변경되지 않았 으면 속성을 변경할 때 바인딩을 가져올 수없는 또 다른 문제입니다. 컬렉션에. 그러나이 질문과는 별개의 문제입니다. – therealjohn

답변

0

는 "SelectedData"또는 비슷한 뭔가라고 MyModelClass에 속성을 추가합니다. 그 속성을 ComboBox의 SelectedItem 속성에 바인딩하십시오.

+0

좋아, 나는 이것을 시도 할 것이다. 제안 해 주셔서 감사합니다. – therealjohn

+0

당신이 dependencyproperty인지 확인하십시오. 그렇지 않으면 UI에 변경 사항을 알려주지 않습니다. 이전에 잘못되었을 가능성이있는 부분이었을 것입니다. 명확성을 위해서만, 종속성 속성은 속성이 변경 될 때이를 알립니다. 기본 객체 변경 - 이것은 'SelectedItem'에 유용합니다. 기본 객체에 알림을 보내려면 .NET 알림 인터페이스 (INotifyPropertyChanged)를 구현해야합니다. – Charleh

+0

설명해 주셔서 감사합니다. 나는 당신이 나의 원래 질문에 대답했기 때문에 이것을 받아 들였다. UI에 대한 알림은 별도의 주제입니다. 제안과 도움에 다시 한 번 감사드립니다. – therealjohn

관련 문제