[英]How to bind two Enum property
嘿,我正在嘗試綁定兩個屬性,以便可以根據它們的值更改 DataGrid 中的背景顏色。 基於這些答案
我已經在我的代碼中實現了建議,但是我遺漏了一些東西並且它不起作用。 感謝您的任何建議。
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
。 更好地允許通過添加名為None
或Default
的顯式0
值來識別未設置的 state :
public enum Value
{
None = 0,
High,
Low
}
請參閱: Microsoft Docs:枚舉設計
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.