2013-03-12 2 views
1

Привет ребята я работаю над проектом в C# WPF, где мне нужно, чтобы отобразить статус клиента в ListView Так что у меня следующее перечисление, который определяет статус клиентаWPF ListView добавление изображений в ListViewItem во время выполнения

//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(); 
    } 
} 

сделать Binding я сделал следующее, что не то, что наш преподаватель точно хотел

<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

Моей проблемы сейчас я использовал два свойства в моем клиенте, чтобы показать отдельные статусы, которые неверны, нам нужно использовать побитовые операции, т. е.

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

, так что я могу сделать код выше, но как бы я связывание на одно свойства, чтобы показать множественный цвета находится в одном gridviewcollumn, я поищите на форуме, но я пропустил его, если этот вопрос или что-то подобное было там

Я действительно не знаю, как сформулировать вопрос, так что я постараюсь его другими словами

Я хочу, чтобы отобразить все выбранные перечислений в столбце.

Спасибо за любую помощь или предложения Надежда Я сделал Sence

ответ

0

Если я правильно понимаю ваш вопрос, вы хотите, чтобы отобразить значок, изображение или элемент пользовательского интерфейса для каждого значения в перечислении и они будут видимый, если статус объекта соответствует этому значению.

Я думаю, что я хотел бы создать простой 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 сравнить значение состояния со значением в ConverterParameter (вы можете конвертировать, что для вас значение перечисления с TryParse статический метод.

Надежда, что помогает.

+0

Спасибо Я понимаю, этот метод, я собираюсь попробовать это, и выведу результат: D –

+0

Я сделал это таким образом, он работал меня, спасибо много –

0

Определить имя DataTemplate StatusDataTemplate, или по умолчанию DataTemplate для Enums.ClientStatus как TargetType.
В этом шаблоне определите 3 столбца X 2 строки Grid.
В каждой ячейке ячейки определите границу, имеющую в качестве фона привязку с использованием одного из 6 перечислений в качестве ConverterParameter, с конвертером, который возвращает «правый» цвет, если значение AND параметр = параметр, прозрачно в противном случае.

Затем вы можете использовать:

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

...если вы использовали по умолчанию DTpl

Или:

<ContentPresenter Content="{Binding Status}" ContentTemplate="{StaticResource StatusTemplate}"/> 
Смежные вопросы