0

これを表示するリストビューがあります(多かれ少なかれ):

--------------------------------------------------------
| Rule no. | Rule Type | Rule Name | Priority | Active |
--------------------------------------------------------
|   1      |     1     |  My Rule  |    1     |   1    |
--------------------------------------------------------

この XAML を使用して:

<ListView.View>
    <GridView>
        <GridViewColumn Header="Rule No" DisplayMemberBinding="{Binding Path=RuleNo}" Width="150" />
        <GridViewColumn Header="Rule Type" DisplayMemberBinding="{Binding Path=RuleTypeNo}" Width="75">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding Path=RuleTypeNo}" Value="1">   
                        </DataTrigger>
                    </DataTemplate.Triggers>        
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
        <GridViewColumn Header="Rule Name" DisplayMemberBinding="{Binding Path=RuleName}" Width="430"/>
        <GridViewColumn Header="Priority" DisplayMemberBinding="{Binding Path=RulePriority}" Width="50"/>
        <GridViewColumn Header="Active" Width="50">
            <GridViewColumn.CellTemplate>
                <HierarchicalDataTemplate>
                    <CheckBox Visibility="Visible" Name="chkActive" IsChecked="{Binding RuleActive}">
                        <TextBlock Text=" "/>
                    </CheckBox>
                </HierarchicalDataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
</ListView.View>

私がやりたいのは、RuleTypeNo列のデータ値を変更することだけです

1

言葉に

アプリ

と値

2

言葉に

ダイヤル

リストビューセルで実行時に視覚的に。例)列に 1 が含まれている場合は単語を表示し、列に 2 が含まれている場合は別の単語を表示します。

これはほとんど不可能に思えます。私はこれに約 9 時間費やしました。ご覧のとおり、データトリガーを使用してこれを実行しようとしましたが、明らかに起動しません。さまざまなセッターを試しましたが、セッターを有効なマークアップにすることができないか、リストビューが表示されても何も起こりません-たとえば、トリガーが明らかに無視されます。

私は何を間違っていますか?私は広範囲に検索しましたが、トリガーを介してセル内の実際のデータを解釈して別の形式で表示したい人は誰もいないようです-数字を単語に変えます-誰もが色やフォントなどを変更したいです-私はしたくありませんスタイルを変更する、ルール タイプ番号のセルに表示される値を変更したい...

セルに視覚的に表示された値を、XAML リストビューの同じセルに表示された別の値に変更するにはどうすればよいですか? 「1」を「App」に、「2」を「Dial」に視覚的に解釈したいだけです。

4

1 に答える 1

0

ValueConverterを作成して値を変更してみてください。

XAML の Resources セクションにコンバーターを含めます。

<src:MyConverter x:Key="myConverter"/>

次に、バインディングを調整します。

<GridViewColumn DisplayMemberBinding="{Binding Path=RuleNo,
                                      Converter={StaticResource myConverter}}}"/>

コンバーターは次のようになります。

[ValueConversion(typeof(int), typeof(String))]
public class MyConverter : IValueConverter
{
    public object Convert(object value,
                          Type targetType,
                          object parameter,
                          CultureInfo culture)
    {
        int number = (int)value;
        if (number == 1)
            return "App";
        if (number == 2)
            return "Dial";
        ...
    }

    public object ConvertBack(object value,
                              Type targetType,
                              object parameter,
                              CultureInfo culture)
    {
        ....
    }
}

とは言っても、私の個人的な好みは、バインドしているオブジェクトにも RuleTypeDescription などと呼ばれる新しいプロパティを公開することです。番号にバインドする代わりに。

編集

トリガーでやりたい場合は、次のようにすることができます。

<GridViewColumn Header="Thingy">
    <GridViewColumn.CellTemplate>
        <DataTemplate DataType="{x:Type WpfTests:Item}">
            <TextBlock>
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding MyNumber}" Value="1">
                                <Setter Property="Text" Value="One"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding MyNumber}" Value="2">
                                <Setter Property="Text" Value="Two"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

DisplayMemberBinding を設定したり、TextBlock 要素の Text 属性にバインドしたりしていないことに注意してください。

于 2013-06-20T08:58:03.433 に答える