1

このような列にaCheckBoxと aを一緒に入れたい:TextBlockDataGrid

<DataGrid CanUserAddRows="False" CanUserDeleteRows="False" >
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="one">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock x:Name="textBlock1"></TextBlock>
                        <CheckBox x:Name="checkBox1"></CheckBox>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

そして、データベースからこの列にデータをバインドしたい:データベースフィールドのデータはそのようなものです:"0-Hello"または"1-Bye"

フィールドの場合は"0-hello"checkBox1チェックを外して とtextBlock1等しくする必要があります"hello"

フィールドが である場合は"1-bye"checkBox1チェックする必要があり、textBlock1と等しくなければなりません"hello"

どうやってやるの?

4

3 に答える 3

1

データトリガーを使用してチェックボックスを設定し、コンバーターを使用して表示したくない部分文字列を取得します

<DataGrid  CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding Items}">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="one" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel >
                            <TextBlock x:Name="textBlock1" Text="{Binding YourProperty,Converter={StaticResource GetSubStringConverter}}"></TextBlock>
                            <CheckBox x:Name="checkBox1" >
                                <CheckBox.Style>
                                    <Style TargetType="CheckBox">
                                        <Setter Property="IsChecked" Value="True"/>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding YourProperty[0]}" Value="0">
                                                <Setter Property="IsChecked" Value="False"></Setter>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </CheckBox.Style>
                            </CheckBox>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

コンバーターは単にテキストを抽出して表示します

 public class GetSubStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null) return null;
        return value.ToString().Substring(2);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2016-02-03T09:24:20.780 に答える
0

カスタム IValueConverter を使用して、文字列を必要なテキストまたはブール値に解析できます。

<DataGrid CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding Data}">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="one">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock x:Name="textBlock1" Text="{Binding DataString, Converter={StaticResource DataToTextConverter}}"  />
                        <CheckBox x:Name="checkBox1" Text="{Binding DataString, Converter={StaticResource DataToBooleanConverter}}"/>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

そしてあなたのリソースで:

<UserControl.Resources>
    <local:DataToTextConverter x:Key="DataToTextConverter"/>
    <local:DataToBooleanConverter x:Key="DataToBooleanConverter"/>
</UserControl.Resources>

コードビハインド:

[ValueConversion(typeof(String), typeof(String))]
public class NotificationSeverityColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //strip the first two characters
        return parsedString;
    }
}
于 2016-02-03T09:31:34.870 に答える
0

あなたがしなければならないのは、データの値コンバーターを作成することだけです:

public class StringBooleanConverter : IValueConverter
    {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                    if(value.ToString() == "0-Hello")
                       return false;
                    else if(value.ToString() == "1-Bye")
                        return true;
                    return false;
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                    if(value is bool)
                    {
                            if((bool)value == true)
                                    return "1-Bye";
                            else
                                    return "0-Hello";
                    }
                    return "no";
            }
    }

そして、あなたの XAML でそれを呼び出します:

<DataGrid CanUserAddRows="False" CanUserDeleteRows="False" >
     <DataGrid.Resources>
         <local:StringBooleanConverter x:Key="StringBooleanConverter" />
     </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="one">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock x:Name="textBlock1"></TextBlock>
                            <CheckBox x:Name="checkBox1" IsCheked="{Binding Path=YourBooleanProperty, Converter={StaticResource StringBooleanConverter}}"></CheckBox>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

注: Window でローカル名前空間をデカールすることを忘れないでください。

<Window x:Class="WpfTutorialSamples.DataBinding.ConverterSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:YourConveterNameSpace"
        >
    //...
</Window> 
于 2016-02-03T09:27:40.380 に答える