1

パラメータ名と値を示す2つの列を持つWPFデータグリッドがあります。

私の要件は、特定のパラメータ名の1つの値(セルの内容)のみが編集可能であり、Datagridの内容全体が読み取り専用である必要があることです。

そして、値を保存するための保存ボタンがあります。

私は数日から適切な解決策を探していましたが、それは多くの場合一般的な要件であると考えられていますが、私は見つけていません...

任意の解決策やアイデアをいただければ幸いです。

XAMLとcsは次のとおりです。データグリッドが読み込まれるときに、PM2セルの値のみを編集モードにし、他のすべてのデータグリッドコンテンツはグレー表示または編集不可にする必要があります。


<Grid>
    <DataGrid ItemsSource="{Binding}"  AutoGenerateColumns="False"
                     Margin="20,57,18,19" Name="dataGrid1" 
                      Height="250" SelectionUnit="Cell" >

     <DataGrid.Columns>
     <DataGridTextColumn Binding="{Binding ParameterName}" Width="100"  Header="Parameter     Name"   IsReadOnly="True"/>

         <DataGridTextColumn Binding="{Binding Value}" Width="100"  Header="Value" />

        </DataGrid.Columns>

    </DataGrid>
    </Grid>

そして私のCSコード

public partial class dgSF : Window
{

ObservableCollection<ParameterSet> pmset;

    public dgSF()
    {
        InitializeComponent();
        pmset = new ObservableCollection<ParameterSet>();

        pmset.Add(new ParameterSet() { ParameterName = "PM1", Value = 10 });

        pmset.Add(new ParameterSet() { ParameterName = "PM2", Value = 50 });

        pmset.Add(new ParameterSet() { ParameterName = "PM3", Value = 70 });

        pmset.Add(new ParameterSet() { ParameterName = "PM4", Value = 80 });

        pmset.Add(new ParameterSet() { ParameterName = "PM5", Value = 100 });

        dataGrid1.ItemsSource = pmset;
    }
}

public class ParameterSet
{

    public string ParameterName { get; set; }

    public int Value { get; set; }

}

本当にありがとう、

アヌ

4

2 に答える 2

3

a を使用し、編集できるようにする列に対してと のDataGridTemplateColumn両方を定義CellTemplateします。CellEditingTemplate編集したくない列については、CellTemplate

  <DataGrid ItemsSource="{Binding}"  AutoGenerateColumns="False"
                     Margin="20,57,18,19" Name="dataGrid1" 
                      Height="250" SelectionUnit="Cell">

            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ParameterName}" Width="100"  Header="Parameter Name" IsReadOnly="True"/>

                <DataGridTemplateColumn Header="Editable Value">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Value}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Value}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>

            </DataGrid.Columns>

        </DataGrid>
于 2012-04-20T13:48:34.867 に答える
1

ParameterSet にもう 1 つのプロパティを追加するだけです。public bool IsEditable {get;set;}

次に、 IsEditable のデータトリガーでセルテンプレートを使用して、有効または無効に設定できます。

編集:

public class ParameterSet
{
    public ParameterSet()
    {
        IsEditable = false;
    }

    public string ParameterName { get; set; }
    public int Value { get; set; }
    public bool IsEditable { get; set; }

}

xaml

    <DataGrid ItemsSource="{Binding Pmset}"  AutoGenerateColumns="False" SelectionUnit="Cell" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding ParameterName}" Width="100"  Header="Parameter     Name"   IsReadOnly="True"/>
            <DataGridTextColumn Binding="{Binding Value}" Width="100"  Header="Value" >
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="IsEnabled" Value="False"></Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsEditable}" Value="true">
                                <Setter Property="IsEnabled" Value="True"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

xaml では、IsEditable=true のセルを除いて、すべてのセルを編集できないスタイルを宣言するだけです。したがって、IsEditable =true のすべてのパラメーターセットを変更できます。

于 2012-04-20T13:39:55.660 に答える