在我的WPF项目中,我有一个数据网格,如下所示:
<DataGrid x:Name="dgConfig" BorderThickness="5" AutoGenerateColumns="False" Margin="10,10,10,15" ItemsSource="{Binding ModulesView, Mode=TwoWay}" FontSize="14" Background="White">
<DataGrid.Columns>
<DataGridTextColumn Header="ParamName" Binding="{Binding ParamName}" />
<DataGridTextColumn Header="ParamValue" Binding="{Binding ParamValue}" />
<DataGridTextColumn Header="DefaultValue" Binding="{Binding DefaultValue}" />
<DataGridTextColumn Header="MaxValue" Binding="{Binding MaxValue}"/>
<DataGridTextColumn Header="MinValue" Binding="{Binding MinValue}"/>
<DataGridTextColumn Header="Address" Binding="{Binding Address}" SortDirection="Ascending"/>
</DataGrid.Columns>
</DataGrid>
现在我希望获得ParamValue
的行值。在这种情况下,我需要将ParamValue
按registerArray
的顺序放入Address
,那么我该如何设置Datagrid
按Address
的顺序显示然后按ParamValue
的顺序将registerArray
放入数组 Address
?非常感谢!
--------------------------------更新-------------- ----------------------------
定义ModulesView:
public ICollectionView ModulesView
{
get { return _ModulesView; }
set
{
_ModulesView = value;
NotifyPropertyChanged();
}
}
使用ModulesView:
private void RefreshModule()
{
ModulesView = new ListCollectionView(sdb.GetModules())
{
Filter = obj =>
{
var Module = (Module)obj;
return SelectedProduct != null && SelectedProduct.ModelNumber == Module.ModelNumber;
}
};
}
答案 0 :(得分:1)
在看到您的ModulesView代码后,我建议使用ObservableCollection在此步骤ModulesView = new ListCollectionView(sdb.GetModules())
而不是sdb.GetModules()
进行绑定。
public ICollectionView ModulesView
{
get { return _ModulesView; }
set
{
_ModulesView = value;
NotifyPropertyChanged();
}
}
private ObservableCollection<Module> myModulesList;
private void RefreshModule()
{
myModulesList = new ObservableCollection<Module>(sdb.GetModules().OrderBy(mod => mod.Address));
ModulesView = CollectionViewSource.GetDefaultView(myModulesList);
ModulesView.Filter = obj =>
{
var Module = (Module)obj;
return SelectedProduct != null && SelectedProduct.ModelNumber == Module.ModelNumber;
};
}
基本上,如果您想要更新数据并在数据网格中显示更改,您需要做的就是修改ObservableCollection myModulesList
。
之后,只要您想填写registerArray
,就可以使用:
registerArray = myModulesList.OrderBy(mod => mod.Address).Select(mod => mod.ParamValue).ToArray();