0

datagridのチェックボックスをオンにしました

<DataTemplate>
  <CheckBox x:Name="chkActive" IsChecked="{Binding Active, Mode=TwoWay}" 
    Style="{StaticResource checkboxStyleNormal}" IsEnabled="True"/>
 </DataTemplate>

データグリッドをバインドします

 datagrid1.ItemSource = dtData.DefaultView;

datatableで、アクティブになっているので、チェックボックスをオンにしたいと思っています01Active = 0

グリッドはバインドされていますが、チェックボックスをバインドできません。

誰かが私の状態に基づいてチェックボックスのチェック/チェックを外す方法を教えてください。

4

3 に答える 3

5

IsCheckedはブール値(true / false)を想定していますが、テーブルには数値型が含まれています。数値をブール値に変換するValueConverterをバインディングステートメントに追加する必要があります。

逆の場合は、WPFでブール値をコンボボックスにバインドする方法を確認してください(ブール値をintに変換します)。あなたの場合、ValueConverterは次のようになります。

public class NumToBoolConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((int)value == 1);   
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (bool)value ? 1 : 0;
    }
}

}

アップデート

この投稿には、タイプチェックとヌルチェックも行うNumToBoolConverterがあります。

public class NumToBoolConverter : IValueConverter
{

    #region IValueConverter Members

    public object Convert(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        if (value!=null && value is int )
        {
            var val = (int)value;
            return (val==0) ? false : true;
        }
        return null;

    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        if (value!=null && value is bool )
        {
            var val = (bool)value;
            return val ? 1 : 0;
        }
        return null;
    }

    #endregion
}
于 2012-12-28T11:37:44.253 に答える
0

それが役立つ場合はこれを試してください:

  • DataGridBoolColumnから派生した列を作成します
  • GetColumnValueAtRow(および列を編集可能にする場合はSetColumnValueAtRow)をオーバーライドします
  • これらのメソッドで継承された実装を呼び出してデータソースを操作しますが、前処理と後処理を行って、0と1をそれぞれ「false」と「true」に変換します。
于 2012-12-28T11:49:22.473 に答える
0

データグリッドにバインドする前にクエリを変更してみて、クエリに「ケース」を追加しました

Select ID ,DESC, CASE WHEN [STATUS] = 0 THEN 'True' WHEN [STATUS] = 1 THEN 'False' END AS  [Active], ORDER [Order] from tbldesc

それは私にとってはうまく機能しています。

于 2013-01-04T12:29:24.940 に答える