얻을 수있는대로 MVVM로되어 있습니다. 나는 이것에 대해 잘못된 것을 보지 않는다. 내 MVVM 프로젝트에서 사용했고 정말 잘 작동합니다.
비록 AutoGeneratedColumns를 사용하지 않지만 "바인딩 가능한"열은 트릭을 첨부했습니다.
<DataGrid Name="dataGrid"
local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}"
AutoGenerateColumns="False"
...>
다음 실제 동작 : 그래서
public class DataGridColumnsBehavior
{
public static readonly DependencyProperty BindableColumnsProperty =
DependencyProperty.RegisterAttached("BindableColumns",
typeof(ObservableCollection<DataGridColumn>),
typeof(DataGridColumnsBehavior),
new UIPropertyMetadata(null, BindableColumnsPropertyChanged));
private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
DataGrid dataGrid = source as DataGrid;
ObservableCollection<DataGridColumn> columns = e.NewValue as ObservableCollection<DataGridColumn>;
dataGrid.Columns.Clear();
if (columns == null)
{
return;
}
foreach (DataGridColumn column in columns)
{
dataGrid.Columns.Add(column);
}
columns.CollectionChanged += (sender, e2) =>
{
NotifyCollectionChangedEventArgs ne = e2 as NotifyCollectionChangedEventArgs;
if (ne.Action == NotifyCollectionChangedAction.Reset)
{
dataGrid.Columns.Clear();
foreach (DataGridColumn column in ne.NewItems)
{
dataGrid.Columns.Add(column);
}
}
else if (ne.Action == NotifyCollectionChangedAction.Add)
{
foreach (DataGridColumn column in ne.NewItems)
{
dataGrid.Columns.Add(column);
}
}
else if (ne.Action == NotifyCollectionChangedAction.Move)
{
dataGrid.Columns.Move(ne.OldStartingIndex, ne.NewStartingIndex);
}
else if (ne.Action == NotifyCollectionChangedAction.Remove)
{
foreach (DataGridColumn column in ne.OldItems)
{
dataGrid.Columns.Remove(column);
}
}
else if (ne.Action == NotifyCollectionChangedAction.Replace)
{
dataGrid.Columns[ne.NewStartingIndex] = ne.NewItems[0] as DataGridColumn;
}
};
}
public static void SetBindableColumns(DependencyObject element, ObservableCollection<DataGridColumn> value)
{
element.SetValue(BindableColumnsProperty, value);
}
public static ObservableCollection<DataGridColumn> GetBindableColumns(DependencyObject element)
{
return (ObservableCollection<DataGridColumn>)element.GetValue(BindableColumnsProperty);
}
}
, 정확히에 "MVVM"틱 방법으로 constitues 무엇? XAML의 모든 것이 "MVVM"패턴과 관련이 없습니다.
할 수있는 또 다른 속임수가 있습니다. 기본적으로 DataGridColumn 템플릿을 중심으로 특정 조건에 따라 열을 축소하는 특정 트리거를 작성합니다. 나는 "준비된"해결책이 없지만 작동 할 것입니다.
가능한 중복 http://stackoverflow.com/questions/4000132/-ad-there-a-way-to-hide-column-in-a-datagrid-autogeneratecolumns? rq = 1 – Fendy
예입니다. 나는 대답을 보았다. 하지만 여전히 나는 그 대답에 만족하지 못합니다. – Haritha
그러면 "나는 이것을 읽었으며 더 많은 MVVM 접근법을 찾고 있습니다."와 같은 질문을 분명히해야합니다. – Fendy