코드에 DatePicker DataGrid 열을 설정하려고합니다. 이 열은 각각 다른 유형의 객체를 표시하는 다양한 DataGrid와 함께 사용됩니다. FrameworkElementFactory
이기 때문에 a deprecated way to programmatically create templates 후 나는 또 다른 접근 방식에 대한 더 나은 검색 알았는데, 그러나DataTemplate을 DataGridColumn에 바인딩 CellTemplate
public DataGridColumn GetDataGridColumn(string header, bool isReadOnly, string fieldName)
{
DataGridTemplateColumn dgCol = new DataGridTemplateColumn();
dgCol.Header = header;
dgCol.IsReadOnly = isReadOnly;
FrameworkElementFactory dateFactory = new FrameworkElementFactory(typeof(DatePicker));
dateFactory.SetBinding(DatePicker.SelectedDateProperty, new Binding(fieldName));
dateFactory.SetValue(DatePicker.IsEnabledProperty, !isReadOnly);
DataTemplate cellTemplate = new DataTemplate();
cellTemplate.VisualTree = dateFactory;
dgCol.CellTemplate = cellTemplate;
return dgCol;
}
: this post에서 나는 작품을 좋아 다음 코드를 함께했다.
대안으로 저는 DataTemplates를 리소스로 만든 다음 코드에 적용하는 방법에 대해 생각했습니다. 이것은 내가 지금까지 가지고있는 곳이지만 바인딩을 설정하는 방법을 모르겠습니다. 여기 내 DatePicker에서 템플릿입니다 :
<DataTemplate x:Key="DatePickerColumnCellTemplate">
<DatePicker SelectedDate="{Binding Path=StartDate}" />
</DataTemplate>
그리고 여기에 새로운 GetDataGridColumn
방법 :
public DataGridColumn GetDataGridColumn(string header, bool isReadOnly, string fieldName)
{
DataGridTemplateColumn dgCol = new DataGridTemplateColumn();
dgCol.Header = header;
dgCol.IsReadOnly = isReadOnly;
dgCol.CellTemplate = (DataTemplate)Application.Current.FindResource("DatePickerColumnCellTemplate");
return dgCol;
}
이 새로운 접근 방식은 DatePicker에서 열의 지금은 UI 디자인에 정의되어 있기 때문에 더 우아한 해결책이 될 것 같다 XAML 코드 만 사용하여 을에 적용했습니다. 그러나 이제 내 DatePicker 열에는 시작 날짜 만 표시됩니다. 메서드의 인수 fieldName
은 "StartDate"또는 "EndDate"또는 데이터 격자에 표시되는 개체에 정의 된 다른 DateTime 변수가 될 수 있습니다. 또한 DatePicker IsEnabled
속성을 isReadOnly 값으로 설정하는 방법을 잘 모르겠습니다.
이것이 최선의 방법이 아니라고 생각되면 알려 주시기 바랍니다.
감사합니다.