나는 mvvm을 연구하고 있으며 동적 추가로이 문제에 직면합니다. 간단한 win 형식에서 DataRow에 대한 하나의 루프와 몇 가지 사양만으로 쉽게이 작업을 수행했습니다. 따라서 작업은 문자열 목록의 모든 요소를 Grid / DataGrid에 배치하는 것입니다. , 두 개의 열-첫 번째는 확인란이고 두 번째는 문자열 기반 컨트롤입니다. 가장 좋은 아이디어는 DataGrid를 사용하는 것입니다. 그래서이 DataGrid와 버튼, 그리고 ViewModel에 대한 별도의 파일을 사용하여 wpf 대화 상자를 만들었습니다. 이제 내 ViewModel 클래스에는 문자열 목록이 포함됩니다. 그리고 나는 .. 나는 ObservableCollection<UIElement>
내 경우에 두 개의 컨트롤과 함께 DataGridRow (??)를 보유해야하는 일부에 대해 읽었습니다 ..
편집 : <DataGridCheckBoxColumn
확인란과 <DataGridTemplateColumn
제어를 위해 노력하고 있습니다. 이제 질문은이 두 열을 문자열 목록으로 바인딩하는 것입니다. 제어 할 문자열 값을 전달하고 모두 OK입니다. 나는 그것을 사용할 필요 ObservableCollection
가 있습니까?
행과 열의 모음으로 보는 대신 mvvm을 사용하여 wpf에서 datagrid를 바인딩 할 때 객체 모음으로 간주합니다. 각 행은 개별 객체를 나타내고 각 열은 해당 객체의 속성을 나타냅니다. 따라서 귀하의 경우에는 그리드에 표시되는 것을 나타내는 클래스를 만들어야하며 여기에는 부울과 문자열 속성이 있습니다 (설명한 2 개의 열에서 사용).
public class MyListItem : ImplementPropertyChangedStuff
{
private string _myString;
private bool _myBool;
public MyListItem()
{ }
public string MyStringProperty
{
get { return _myString; }
set
{
_myString = value;
this.RaisePropertyChanged("MyStringProperty");
}
}
public bool MyBoolProperty
{
get { return _myBool; }
set
{
_myBool = value;
this.RaisePropertyChanged("MyBoolProperty");
}
}
}
이제 뷰 모델에서 각 열에 대해 별도의 목록을 갖는 대신 단일 목록을 가질 수 있습니다. 행을 추가 / 제거 / 편집하려면 Observable 컬렉션을 사용해야합니다. 속성 변경 내용이 내장되어 있고 컬렉션이 변경되면 UI를 업데이트하기 때문입니다.
public class MyViewModel
{
private ObservableCollection<MyListItem> _items;
public ObservableCollection<MyListItem> Items
{
get { return _items; }
set
{
_items = value;
this.RaisePropertyChanged("Items");
}
}
public MyViewModel()
{
this.Items = new ObservableCollection<MyListItem>();
this.LoadMyItems();
}
public void LoadMyItems()
{
this.Items.Add(new MyListItem { MyBoolProperty = true, MyStringProperty = "Hello" };
}
}
마지막으로 DataGrid 바인딩 :
<DataGrid ItemsSource="{Binding Path=Items, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="MyBoolProperty" Binding="{Binding Path=MyBoolProperty}"
<DataGridTextColumn Header="MyStringProperty" Binding="{Binding Path=MyStringProperty"/>
</DataGrid.Columns>
</DataGrid>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다