0

こんにちは、動的列を生成する次のコードがあります。

     <DataGrid AutoGenerateColumns="False" DockPanel.Dock="Top" ItemsSource="{Binding StudentList}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding StudentName}"  
                                Header="Name"/>
            <DataGridTemplateColumn Width="*">
                <DataGridTemplateColumn.HeaderStyle>
                    <Style TargetType="DataGridColumnHeader">
                        <Setter Property="HorizontalContentAlignment" 
                                Value="Stretch" />
                        <Setter Property="VerticalContentAlignment"  Value="Stretch" />
                        <Setter Property="Margin" Value="0" />
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <ItemsControl  ItemsSource="{Binding DataContext.TitleList, ElementName=LayoutRoot}">
                                        <ItemsControl.ItemsPanel>
                                            <ItemsPanelTemplate>
                                                <StackPanel Orientation="Horizontal">
                                                </StackPanel>
                                            </ItemsPanelTemplate>
                                        </ItemsControl.ItemsPanel>
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <Border  Width="70" >
                                                    <TextBlock Text="{Binding}" TextAlignment="Center"/>
                                                </Border>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGridTemplateColumn.HeaderStyle>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ItemsControl ItemsSource="{Binding ProjectScores}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border Width="70">
                                        <TextBlock Text="{Binding}" TextAlignment="Center"/>
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBox Text="{Binding}" BorderThickness="0"/>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

しかし、値を編集しようとすると、「双方向バインディングにはパスまたは XPath が必要です」というメッセージが表示されます。これを修正するにはどうすればよいですか? 私のセル値は、動的に変更される「TitleList」に基づいて動的にロードされます。

4

3 に答える 3

2

私はちょうど同じ問題を抱えていて、 DataType="models:Account" を使用して解決しました

<DataTemplate DataType="models:Account" >
    <StackPanel Orientation="Horizontal">
        <TextBox Text="{Binding}" BorderThickness="0"/>
    </StackPanel>
</DataTemplate>
于 2013-10-19T16:09:48.637 に答える
1

CellEditingTemplate次のように変更します

<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <ItemsControl ItemsSource="{Binding Path=ProjectScores}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Border Width="70">
                        <TextBox Text="{Binding Path=.}" TextAlignment="Center"/>
                    </Border>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
于 2013-02-14T02:17:14.433 に答える
0

ProjectScores のジェネリック コレクションを CustomType のコレクションに変更することで、この問題を解決しました。

前:

public List<string> ProjectScores{get;set;}

修正は次のとおりです。

public List<StudentScore> ProjectScores{get;set;}
public class StudentScore
{
public ScoreValue{get;set;}
}

そしてUIで:

<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
    <ItemsControl ItemsSource="{Binding Path=ProjectScores}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border Width="70">
                    <TextBox Text="{Binding Path=ScoreValue}" TextAlignment="Center"/>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</DataTemplate>

それは私の問題を解決しました。

于 2013-02-14T20:09:49.820 に答える