3

私が本当にやりたいことはStringFormat、 の特定のバインディングの を変更することDataGridTextColumnですが、それはバインディングによって定義されているため、バインディング全体をどうにかして変更する必要があると思います。

a の使用を避けたい理由DataGridTemplateColumnは、DataGridTextColumn にはいくつかの組み込みの基本機能があるように思われるためです。これらの機能を失うと、次のように手動で処理するコードを作成する必要があります。

  • セルを自動的に編集モードにする非編集モード セルへの入力を開始する機能
  • データのコピーと貼り付け (DataGrid 内および Excel から)

現在のバインド (必要な表示/読み取りモードのバインド)

Binding="{Binding ADecimalNumber StringFormat={StaticResource ReadDecimalFormat}}"

必要な編集モードのバインディング

Binding="{Binding ADecimalNumber StringFormat={StaticResource WriteDecimalFormat}}"

参考までに、ReadDecimalFormatは 2 桁の精度でWriteDecimalFormat10 進数値を表示し、 は入力された元の 10 進数値を表示します (すべての桁の精度、ほとんどの場合、これは 4 桁です)。

4

2 に答える 2

4

暫定的に動作するようになったと思いますが、現在テスト中です。

<DataGridTextColumn Header="Value" ClipboardContentBinding="{Binding ADecimalNumber}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="Text" Value="{Binding ADecimalNumber, StringFormat={StaticResource ReadDecimalFormat}}"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="TextBox">
            <Setter Property="Text" Value="{Binding ADecimalNumber, StringFormat={StaticResource WriteDecimalFormat}}"/>
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
于 2012-09-19T19:18:48.933 に答える
2

要素のスタイルを使用して、編集中かどうかを確認することで、これを実現できました。

<DataGridTextColumn>
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Text" Value="{Binding}" />
        </Style>
    </DataGridTextColumn.ElementStyle>


<DataGridTextColumn.EditingElementStyle>
    <Style TargetType="{x:Type TextBox}">
      <Setter Property="Text" Value="{Binding}" />
     </Style>
 </DataGridTextColumn.EditingElementStyle>

于 2012-09-19T19:20:06.700 に答える