WPF에서 MVVM 패턴을 배우려고하고 있는데 바인딩 및 컬렉션과 관련된 몇 가지 문제가 있습니다. 컬렉션이 바뀌기 때문에 컬렉션 인덱스에 바인딩하는 것을 좋아하지 않습니다.컬렉션의 인덱스를 사용하지 않고 컬렉션에 바인딩하는 방법은 무엇입니까?
내가 가진 MyModelClass : ObservableCollection<MyData>
MyData
클래스는 내 사용자 정보를 보유하는 데에 DataValue
라는 속성이 있습니다. 나는 MyModelClass
을 MyData
개체로 채 웁니다. 보기 모델 클래스 (MyViewModel
)에서 CurrentData
MyModelClass
유형의 속성이 있습니다.
이 경우 내 바인딩은 콤보 상자로 연결됩니다.
<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}"
)과 같이 인덱스를 사용하지 않고 컬렉션 또는 컬렉션에 표시하려는 값에 바인딩하려면 어떻게합니까? 이 문제를 어떻게 해결할 수 있습니까?
감사합니다,
컬렉션에 하나의 항목 만 원할 때 컬렉션 유형을 구현하는 이유는 무엇입니까? 현재 항목을 원할 경우 현재 항목을 가리키는 다른 속성이 필요합니다. – Charleh
이것은 나에게 혼란 스럽다는 것에 동의하지만, 그 속성이 변경되지 않았 으면 속성을 변경할 때 바인딩을 가져올 수없는 또 다른 문제입니다. 컬렉션에. 그러나이 질문과는 별개의 문제입니다. – therealjohn