我想创建一种甘特图规划工具。第一列应显示每个计划步骤的数据。第二列应承载显示文本框的画布,而左和宽度值则从数据派生。这样工作正常,但画布总是显示文本框的所有Planings集合项目,而不是根据记录行的文本框。
我非常确定这一行是问题所在:
<ItemsControl ItemsSource="{Binding DataContext.Planings, ElementName=dgPlanings}" >
因为它引用整个集合而不是记录。
<DataGrid x:Name="dgPlanings" AutoGenerateColumns="False" ItemsSource="{Binding Planings}" CanUserAddRows="False" HeadersVisibility="Column">
<DataGrid.Columns>
<!--Baustellenspalte-->
<DataGridTemplateColumn Width="300">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<TextBox Text="Nr" Grid.Column="0"></TextBox>
<TextBox Text="To" Grid.Column="1"></TextBox>
<TextBox Text="Till" Grid.Column="2"></TextBox>
<TextBox Text="" FontFamily="Segoe MDL2 Assets" Grid.Column="3"></TextBox>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<TextBox ></TextBox>
<DatePicker SelectedDate="{Binding To, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1"></DatePicker>
<DatePicker SelectedDate="{Binding Till, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="2"></DatePicker>
<TextBox Text="{Binding Workers}" Grid.Column="3"></TextBox>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--Planungsspalte-->
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding DataContext.Planings, ElementName=dgPlanings}" >
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left">
<Setter.Value>
<MultiBinding Converter="{StaticResource d2x}">
<Binding Path="To" Mode="OneWay" diag:PresentationTraceSources.TraceLevel="High" />
<Binding Path="ActualWidth" ElementName="coPlanung" Mode="OneWay"/>
</MultiBinding>
</Setter.Value>
</Setter>
<Setter Property="Canvas.Right">
<Setter.Value>
<MultiBinding Converter="{StaticResource d2x}">
<Binding Path="Till" Mode="OneWay" />
<Binding Path="ActualWidth" ElementName="coPlanung" Mode="OneWay"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Width="{Binding ActualWidth, ElementName=coPlanung}" Background="White" Height="30" Margin="0"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=To }"></TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我需要将itemssource的DataContext设置为?
答案 0 :(得分:2)
如果您只想为每一行显示一个ItemsControl
,为什么使用TextBox
?这没有多大意义。 ItemsSource
的{{1}}只能设置或绑定到ItemsControl
。
您应该将IEnumerable
和Canvas
直接放入DataTemplate:
TextBox