0
我有一個DataGrid
,它通過數據綁定顯示其行和列。我的問題是,如何清理我的DataGrid
的顯示?例如,通過設置列width
來擺脫未使用的空間。通常我會設置width
爲每,但這一次我甚至不需要在XAML中使用該行(並且它也不工作,因爲我使用數據綁定來填充)。格式化數據綁定DataGrid的顯示屬性
我DataGrid
使用(查看所有的多餘空間的吧?):
XAML的DataGrid
的:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding TransInfoCollection}" IsReadOnly="True" SelectedItem="{Binding SelectedTransponder}" Margin="12,12,14,60" CanUserResizeColumns="False" CanUserResizeRows="True" >
<DataGrid.Columns>
<DataGridTextColumn Header="{DynamicResource transLocation}" Binding="{Binding Path=Location}" Width="90" />
<DataGridTextColumn Header="{DynamicResource transponder}" Binding="{Binding Path=Tranponder}" Width="*" />
</DataGrid.Columns>
</DataGrid>
窗口視圖模型:
public class TransponderMaintenanceViewModel : PropertyChangedBase
{
private ObservableCollection<TransponderProps> _transInfoCollection; //DataGrid Collection
private TransponderProps _selectedTransponder;
private Command _deleteCommand;
HierarchicalVM pathLocationsNode = App.MainTree.Data[2].Children[0]; //Path -> Locations
public TransponderMaintenanceViewModel()
{
TransInfoCollection = new ObservableCollection<TransponderProps>();
_deleteCommand = new Command(DeleteCommand_Ops);
for (int i = 0; i < pathLocationsNode.Children.Count(); i++) //Adds Transponder information to DataGrid
{
if (pathLocationsNode.Children[i].Children[0].Children.Count() > 0)
{
for (int j = 0; j < pathLocationsNode.Children[i].Children[0].Children.Count(); j++)
{
TransInfoCollection.Add(new TransponderProps { Location = new MultiItemString(new[] { Regex.Match(pathLocationsNode.Children[i].DisplayName.Value, @"\d+").Value }, false),
Transponder = new MultiItemString(new[] { pathLocationsNode.Children[i].Children[0].Children[j].DisplayName.Value }, false) });
}
}
}
}
//Prop for Collection that will store Transponders and their Location
public ObservableCollection<TransponderProps> TransInfoCollection
{
get { return _transInfoCollection; }
set
{
_transInfoCollection = value;
NotifyPropertyChange(() => TransInfoCollection);
}
}
//Prop for the SelectedItem in the DataGrid
public TransponderProps SelectedTransponder
{
get { return _selectedTransponder; }
set
{
_selectedTransponder = value;
NotifyPropertyChange(() => SelectedTransponder);
}
}
//Delete Command
public Command DeleteCommand { get { return _deleteCommand; } }
private void DeleteCommand_Ops()
{
for (int i = 0; i < pathLocationsNode.Children.Count(); i++) //Delete Transponder from CartTools
{
for (int j = 0; j < pathLocationsNode.Children[i].Children[0].Children.Count(); j++)
{
if (pathLocationsNode.Children[i].Children[0].Children[j].DisplayName.Value == SelectedTransponder.Transponder.Value)
{
var transParent = pathLocationsNode.Children[i].Children[0];
transParent.Children.Remove(transParent.Children[j]);
}
}
}
TransInfoCollection.Remove(SelectedTransponder); //Remove Transponder from DataGrid
}
}
public class TransponderProps : PropertyChangedBase
{
private MultiItemString _location, _transponder;
public TransponderProps()
{
}
public MultiItemString Location
{
get { return _location; }
set
{
_location = value;
NotifyPropertyChange(() => Location);
}
}
public MultiItemString Transponder
{
get { return _transponder; }
set
{
_transponder = value;
NotifyPropertyChange(() => Transponder);
}
}
}
感謝您的回答@FelixCastor!這看起來像是可以工作的東西,但是我得到一個'InvalidOperationException'(Items Collection在使用'ItemsSource'之前必須是空的),因爲創建這些'DataGridTextColumns'明顯增加了'DataGrid'的ItemsSource。有沒有辦法解決? – 2014-10-29 16:15:08
所以,我不確定爲什麼會拋出一個錯誤。您嘗試顯示的集合是什麼類型的數據結構?上面的例子可以在你有'List list'和'Location'和'Transponder'是SomeObject屬性的上下文中使用。因此,您將'DataGrid'綁定到列表,將列綁定到列表中包含的對象的屬性。 –
2014-10-29 16:43:48
另外,您是否設置了'AutoGenerateColumns =「False」'這很重要? – 2014-10-29 16:47:46