2013-03-12 37 views
1

嗨,大家好,我在C#WPF一個項目,我需要在ListView 顯示客戶端的狀態,因此,我有以下枚舉定義了客戶端狀態WPF列表視圖中添加圖片到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(); 
    } 
} 

做綁定我做了以下,這是不是我們的講師究竟想

<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; 

現在,這將返回33

我的問題的一個int值現在是我在我的客戶端中使用了兩個屬性來顯示不正確的狀態,我們需要使用按位操作即。

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

所以我可以做上面的代碼,但我將如何做的一個屬性綁定,顯示多種顏色的在一個gridviewcollumn,我搜索了論壇,但我錯過了,如果這個問題或類似的東西在那裏

我真的不知道如何陳述的問題,所以我會嘗試換句話說

我要顯示在列中的所有選擇枚舉。

感謝任何幫助或建議 希望我做SENCE

回答

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比較狀態的值與ConverterParameter值(您可以在轉換爲你列舉的價值與TryParse靜態方法。

希望有所幫助。

+0

謝謝你,我理解這個方法,我去了試試這一個,會帶出一個結果:d – 2013-03-13 04:16:54

+0

我這樣做了,它工作了我,很多 – 2013-03-16 14:10:21

0

定義的DataTemplate名StatusDataTemplate,或Enums.ClientStatus爲TargetType的一個默認的DataTemplate。
在此模板中,定義3列X 2行網格。
在每個網格單元格中,定義一個邊界,將具有6個枚舉中的一個作爲ConverterParameter的綁定作爲背景綁定到轉換器,如果值AND參數=參數返回「正確」顏色,否則爲透明。

然後你可以使用:

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

...如果您使用的默認DTPL

或者:

<ContentPresenter Content="{Binding Status}" ContentTemplate="{StaticResource StatusTemplate}"/>