1

こんにちはみんな私はリストビューでクライアントのステータスを表示する必要があるC#WPFのプロジェクトに取り組んでいますそれで私はクライアントステータスを定義する次の列挙型を持っています

//Values used here for Bitwise Operations
public enum ClientStatus 
{
    NONE = 0,
    NEWCLIENT = 1, 
    MONITORED = 2, 
    IMPORTAND = 4,  
    DISATISFIED = 8, 
    DETERIORATING = 16, 
    SATISFIED = 32 
};

それぞれを特定のブラシに変換するには、次のコードをテストしましたが、機能します

[ValueConversion(typeof(Enums.ClientStatus), typeof(Brush))]
public class StateValueColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Brush Brush = Brushes.Red;
        if (value is Enums.ClientStatus)
        {
            Enums.ClientStatus sv = (Enums.ClientStatus)value;

            switch (sv)
            {
                case Enums.ClientStatus.IMPORTAND:
                    Brush = Brushes.Blue;
                    break;
                case Enums.ClientStatus.MONITORED:
                    Brush = Brushes.Purple;
                    break;
                case Enums.ClientStatus.NEWCLIENT:
                    Brush = Brushes.Orange;
                    break;
                case Enums.ClientStatus.SATISFIED:
                    Brush = Brushes.Green;
                    break;
                case Enums.ClientStatus.DETERIORATING:
                    Brush = Brushes.Yellow;
                    break;
                case Enums.ClientStatus.DISATISFIED:
                    Brush = Brushes.Red;
                    break;
            }
        }
        return Brush;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

バインディングを行うために私は次のことを行いましたが、これは私たちの講師が正確に望んでいたことではありません

<GridViewColumn Header="Status" Width="110">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                 <TextBox Width="50" Background="{Binding Path=Status, Converter={StaticResource ColorConverter}}"></TextBox>
                 <TextBox Width="50" Background="{Binding Path=SatisFactory, Converter={StaticResource ColorConverter}}"></TextBox>
            </StackPanel>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

各列挙型を異なる色で表示する必要がありますが、クライアントは複数のステータスを持つことができます。

var status = ClientStatus.NEWCLIENT | ClientStatus.SATISFIED;

これにより、int値33が返されます。

私の問題は、クライアントで2つのプロパティを使用して個別のステータスを表示することです。これは正しくないため、ビット演算を使用する必要があります。

if ((status & ClientStatus.NEWCLIENT) == ClientStatus.NEWCLIENT)
{
    //do whatever
}

だから私は上記のコードを行うことができますが、1つのグリッドビュー列に複数の色を表示するために1つのプロパティをバインドするにはどうすればよいですか?フォーラムを検索しますが、この質問または同様のものがあった場合は見逃しました

質問の仕方がよくわからないので、言い換えてみます

選択したすべての列挙型を列に表示したい。

助けや提案をありがとう私が意味を作ったことを願っています

4

2 に答える 2

0

質問を正しく理解している場合は、列挙型の値ごとにアイコン、画像、またはUI要素を表示し、オブジェクトのステータスがその値と一致する場合にそれらを表示したいと考えています。

私は、次のようなすべてのUI要素を含む単純なStackPanelを作成すると思います。

<StackPanel Orientation="Horizontal">
  <Rectangle Fill="Blue" 
             Visibility="{Binding Status, 
                                  Converter={StaticResource StatusToVisibilityConverter},
                                  ConverterParameter=NEWCLIENT}" />
  <Rectangle Fill="Green" 
             Visibility="{Binding Status, 
                                  Converter={StaticResource StatusToVisibilityConverter},
                                  ConverterParameter=SATISFIED}" />
  ...
</StackPanel>

次に、StatusToVisibilityConverterで、Statusの値をConverterParameterの値と比較します(TryParse静的メソッドを使用して列挙の値に変換できます。

お役に立てば幸いです。

于 2013-03-12T18:22:44.300 に答える
0

DataTemplate名StatusDataTemplate、またはEnums.ClientStatusのデフォルトのDataTemplateをTargetTypeとして定義します。
このテンプレートでは、3列X2行のグリッドを定義します。
各グリッドセルで、6つの列挙型の1つをConverterParameterとして使用してバインディングを背景として持ち、値ANDパラメーター=パラメーターの場合は「右」の色を返し、それ以外の場合は透明なコンバーターを使用して、境界線を定義します。

次に、使用できます:

<ContentPresenter Content="{Binding Status}" />   

...デフォルトのDTplを使用した場合

または :

<ContentPresenter Content="{Binding Status}" ContentTemplate="{StaticResource StatusTemplate}"/>
于 2013-03-12T19:57:08.120 に答える