簡體   English   中英

如何綁定兩個枚舉屬性

[英]How to bind two Enum property

嘿,我正在嘗試綁定兩個屬性,以便可以根據它們的值更改 DataGrid 中的背景顏色。 基於這些答案

  1. 如何將枚舉綁定到 WPF 中的 combobox 控件?
  2. 在數據網格中綁定枚舉屬性的最佳方法

我已經在我的代碼中實現了建議,但是我遺漏了一些東西並且它不起作用。 感謝您的任何建議。

namespace Example{

public class ExampleClass {

private ExampleObject exampleObject;

public ExampleObject ExampleObject {get; set;}

}
}

namespace Object{
public class ExampleObject {

private Value value;
public ExampleObject ExampleObject {get; set;}

}
public Enum Value
{
High,
Low


}
}

Wpf DataGrid DataTrigger 我在哪里改變顏色

<DataGrid.RowStyle>
                        <Style TargetType="DataGridRow">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding ExampleObject.Value}" Value="{StaticResource CellConverter}">
                                    <Setter Property="Background" Value="Green">
                                        
                                    </Setter>
                                </DataTrigger>

                                <DataTrigger Binding="{Binding ExampleObject.Value}" Value="{StaticResource CellConverter}">
                                    <Setter Property="Background" Value="Red">

                                    </Setter>
                                </DataTrigger>
                                
                                
                            </Style.Triggers>
                        </Style>
                    </DataGrid.RowStyle>

CellConvertor class

public class CellConverter : IValueConverter
    {
    
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                Value input = ((Value)value);
                switch (input)
                {
                    case Value.High:
                    return "High";                                          
                        
                    case Value.Low:
                        return "Low";
                    default:
                        return DependencyProperty.UnsetValue;
                }
            }
    
            
        }

您必須修復示例中的觸發條件。

此外,為了綁定到ExampleObject.Value枚舉值, ExampleObject.Value必須public屬性

public class ExampleObject 
{
  public Value Value {get; set;}
}

在 XAML 中,您可以使用x:Static標記擴展來引用 static 變量和常量等enum值。 實際上,C# enum是作為一組常量實現的。 當使用x:Static擴展時,您的當前值轉換器CellConverter變得過時:

<!-- 
  In this example the namespace that defines the enum type 'Value' 
  is assumed to be registered under the XAML alias 'local' 
-->
<DataGrid.RowStyle>
  <Style TargetType="DataGridRow">
    <Style.Triggers>
      <DataTrigger Binding="{Binding ExampleObject.Value}" 
                   Value="{x:Static local:Value.Low}">
        <Setter Property="Background" Value="Green" />
      </DataTrigger>

      <DataTrigger Binding="{Binding ExampleObject.Value}" 
                   Value="{x:Static local:Value.High}">
        <Setter Property="Background" Value="Red" />
      </DataTrigger>
    </Style.Triggers>
  </Style>
</DataGrid.RowStyle>

備注:一般來說,如果要使用值轉換器,則必須相應地配置Binding並將IValueConverter實例分配給Binding.Converter屬性。 您不能將IValueConverter直接分配給屬性以使其轉換。 IValueConverter必須接收一個輸入,他可以轉換該輸入以生成 output。 輸入是實際Binding提供的值(這就是Binding具有Binding.Converter屬性的原因——它們總是串聯 go)。

請參閱Microsoft Docs:DataBinding 概述(數據轉換)

請注意,由於屬性DataTrigger.Value不是DependencyProperty ,因此您不能通過Binding定義其值。

轉換器示例:

<Window>
  <Window.Resources>
    <MyValueConverter x:Name="MyValueConverter" />
  </Window.Resources>

  <SomeObject SomeDependencyProperty="{Binding SourceProperty, Converter={StaticResource MyValueConverter}}" />
</Window>

定義默認枚舉值以避免錯誤也是推薦的最佳實踐。 枚舉實例的默認值始終為0 ,在您的情況下默認為High 更好地允許通過添加名為NoneDefault的顯式0值來識別未設置的 state :

public enum Value
{
  None = 0,
  High,
  Low
}

請參閱: Microsoft Docs:枚舉設計

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM