ํ์ฌ Enum์ ObjectDataProvider๋ฅผ ํตํด์ Combobox์ Item ์ผ๋ก Binding ํ์ฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด Item๋ค์ ๋ํด Tooltip์ ๋ง๋ค์ด์ ์ค๋ช ์ ๋์ฐ๊ณ ์ถ์๋ฐ, ์ด๋ฐ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผํ ๊น์?
@Vincent ํน์ ์กฐ๊ธ ๋ ์ค๋ช
ํด์ฃผ์ค ์ ์์ผ์ ๊ฐ์! ![]()
<ObjectDataProvider x:Key="EPlatform"
MethodName="GetValues"
ObjectType="{x:Type clr:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="awesomeswagenum:ETargetSite"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
...
<dxe:ComboBoxEdit Grid.Column="1"
x:Name="DxCmbSelectPlatform"
ItemsSource="{Binding Source={StaticResource EShopCode}}"
SelectedItem="{Binding ShopCategoryKind}"
IsTextEditable="False"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
FontFamily="{StaticResource MainFont}"
FontSize="17">
<dxe:ComboBoxEdit.StyleSettings>
<dxe:ComboBoxStyleSettings/>
</dxe:ComboBoxEdit.StyleSettings>
</dxe:ComboBoxEdit>
์ค๋ฌด์์ ์ฌ์ฉ๋๋ ์ค์ XAML์ธ๋ฐ ์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ Enum๊ฐ์ด View์ ๋ณด์ด๊ฒ ๋๋๊น ์ค๋ช
์ด ์์ด์ Tooltip์ ์ฌ์ฉํด๋ณผ๊นํ๋๋ฐ, ์ด ๊ฒฝ์ฐ ์ด๋ค์์ผ๋ก ์ฌ์ฉํด์ผํ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@Vincent DevExpress ์ค์น์ค์
๋๋ค. ![]()
์ด๋ฐ ํ๋ฒ ํ์ธํด๋ณผ๊ฒ์~
์์ฐ ใทใท ๊ฐ์ฌํฉ๋๋ค!!! ์ฌ์ค ๋ฐ๋ธ์ง๋ฌธ์ผ๋ก ๋ถ๋ฅ๋๋ฉด ๋ฐ๋ธ์ต์คํ๋ ์ค์ ์ง๋ฌธ๋จ๊ธฐ๋๊ฒ ๋ง๋๋ฐ ใ ใ โฆ; ๊ทธ๋ฅ WPF ๋ฐฉ์์ผ๋ก ํด์ฃผ์ ๋ ์ถฉ๋ถํฉ๋๋ค!
@Vincent ํ์๋ ค๋๊ฒ ์ด๊ฒ ๋ง์์ง ๋ชจ๋ฅด๊ฒ ๋ค์โฆ ![]()
<Window>
<Window.Resources>
<ObjectDataProvider x:Key="ODP"
MethodName="GetValues"
ObjectType="{x:Type s:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:Marvel"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<Style TargetType="{x:Type dxe:ComboBoxEditItem}" x:Key="CMBI">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}"
ToolTip="{Binding}"
Foreground="Red" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<dxe:ComboBoxEdit HorizontalAlignment="Left"
VerticalAlignment="Top" Width="150"
ItemsSource="{Binding Source={StaticResource ODP}}"
ItemContainerStyle="{StaticResource CMBI}"/>
</Grid>
</Window>
๋ค ์ด๊ฑฐ๋ ๋น์ทํ๋ฐ Tooltip์ ์ ๊ฐ ๋ฐ์ธ๋ฉํ๋ Enum์ ๊ดํ ์ค๋ช ์ด ๋ถ์กฑํ๋ค์ ใ ใ ;;
public enum ERegistState
{
/// <summary>
/// ์ํ์ ๋ง ํฌ๋กค๋ง ํด์์ ๋ ์ด๊ธฐ ๋ฐ์ดํฐ
/// </summary>
[Display(Name = "Init", Description = "์ํ์ ํด๋กค๋งํ ์งํ์ ๋ฐ์ดํฐ")]
Init,
[Display(Name = "Hold", Description = " ๋ณด๋ฅ ์ํ")]
Hold,
[Display(Name = "ImgHold", Description = "์ด๋ฏธ์ง ์์
๋ถ๊ฐ์ ์ด์ ๋ก ๋ณด๋ฅ๋ ์ํ")]
ImgHold,
/// <summary>
/// ๋ฑ๋ก๋์ง ์์ ์ํ ์ค์์ ์์ ์ค์ธ ๊ฒ. (๋ฑ๋กํ๋ค๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ๋ Edit์ด๋ฉฐ ๋ฑ๋ก ์ Error Message๋ก ๊ตฌ๋ถํจ.)
/// </summary>
[Display(Name = "Edit", Description = "๋ณด์ ์์
์งํ์ค์ธ ์ํ")]
Edit,
/// <summary>
/// ์ ์ ๋ฑ๋ก์๋ฃ
/// </summary>
[Display(Name = "Regist", Description = "์ํ์ด ์ผํผ์ ๋ฑ๋ก๋ ์ํ")]
Regist,
/// <summary>
/// ํฐ์ด ์ธํ
์๋ฃ
/// </summary>
[Display(Name = "Tier", Description = "์ํ์ด ์ผํผ์ ๋ฑ๋ก๋ ์ดํ 2Tier์ฒ๋ฆฌ๊น์ง ๋ ์ํ")]
Tier,
/// <summary>
/// ํ ์ธ ์ ์ฉ ์๋ฃ
/// </summary>
[Display(Name = "Discounted", Description = "์ํ์ด ์ผํผ์ ๋ฑ๋ก๋ ์ดํ Discount ๊น์ง ์ ์ฉ๋ ์ํ")]
Discounted
}
์๋ฐ์์ผ ๋ ์ฌ๊ธฐ์ Display ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ XAML๋ก ๋ฐ์ธ๋ฉํด์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๊ฒ์
๋๋ค.
์์ ๋ก ์ฃผ์ ๊ฒ์ฒ๋ผ ํ๋ฉด Tooltip์ enum๊ฐ์ด ์ฐํ๋์์์ ใ
ใ
;;
ํผ์ ๋๋ ค ์ฃ์กํฉ๋๋ค.
ํด๊ฒฐํ์ต๋๋ค~
์๋ ค์ฃผ์ ์คํ์ผ์ Tooltip์ Converter๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๋์์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
<dxe:ComboBoxEdit.ItemContainerStyle>
<Style TargetType="{x:Type dxe:ComboBoxEditItem}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}"
ToolTip="{Binding Converter={StaticResource EnumDisplayConverter}}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</dxe:ComboBoxEdit.ItemContainerStyle>
public class EnumDisplayConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
ERegistState enumValue = (ERegistState)Enum.Parse(typeof(ERegistState), value.ToString());
return AttributeHelper.GetAttribute<DisplayAttribute>(enumValue).Description;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
AttributeHelper.GetAttribute() ๋ฉ์๋๋ ๊ตฌ๊ธ๋งํด์ ์ฐพ์๋ธ ํด๋น Enum์ ๋ํ DisplayAttribute๋ฅผ ์ฐพ์๋ด๋ ๋ฉ์๋์ ๋๋ค.
ํน์ ์ปจ๋ฒํฐ์ MarkupExtension์ ์์๋ฐ์ผ๋ฉด ์ด๋ค ์ด์ ์ด ์๋์?
์ด๋ ๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ ์ฒ์์ด๋ผ ์ด๋ค ์ด์ ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค ![]()
์ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ์ฃ์กํฉ๋๋ค ์๋ฌด ์ด์ ์์ต๋๋ค. ์ญ์ ํ ๊ฒ์ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ์ด๊ฑฐ์ ๊ฑฐ ํด๋ณด๋ค๊ฐ ์์ง์ ๋ค์ ใ ใ ใ ใ ใ ใ
์ฒ๋ฆฌํ์ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ๊ฒ
TypeConverter ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋ ์ฐธ๊ณ ํด ๋ณด์๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
TypeConverter๋ ๋ฐ์ธ๋ฉ ๋์์ด View์ ํ์ ๋ ๋ ์๋์ผ๋ก ์ฐธ์กฐ๋์ ์ปจ๋ฒํฐ๋ฅผ ํธ์ถํ๊ฒ ๋์ด
xaml์์ ๋ช
์์ ์ผ๋ก Binding Converter ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋ฉ๋๋ค.![]()
@aroooong ์ข์ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค!! ![]()
๊ฐ๋จํ๊ฒ ์ํ ๋ถํ๋๋ ค๋ ๋ ๊น์?
์ฝ๋๋ ์์ค๋ ์์ ์ฝ๋๋ฅผ ์ธ์ฉํ์ต๋๋ค.
[TypeConverter(typeof(EnumDisplayConverter <ESecuritiesCompanyType>))]
public enum ERegistState
{
[Description("์ํ์ ํด๋กค๋งํ ์งํ์ ๋ฐ์ดํฐ")]
Init,
[Description("๋ณด๋ฅ ์ํ")]
Hold,
[Description("์ด๋ฏธ์ง ์์
๋ถ๊ฐ์ ์ด์ ๋ก ๋ณด๋ฅ๋ ์ํ")]
ImgHold,
}
public class EnumDescriptionConverter<T> : EnumConverter
{
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
TODO .. ๋ฆฌํ๋ ์
์ ์ฌ์ฉํด์ Description์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ ํ์ฑ
}
}
ERegistState์ด ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ๋ View๊ฐ ํ๋ฉด์ ํ์๋ ๋
TypeConverter ์ดํธ๋ฆฌ๋ทฐํธ ์ฌ๋ถ๋ฅผ ํ๋จํด์ EnumDescriptionConverter๋ฅผ ํธ์ถํฉ๋๋ค.
View์ ํ์๋๋ ๋ด์ฉ์ ConvertTo๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋๋ก ์ฒ๋ฆฌ ํ ์ ์์ต๋๋ค.
์คํธ!! ์ด๊ฒ๋ ํด๋ณด๊ฒ ์ต๋๋ค ใ ใ ๊น์ฌํฉ๋๋ค!!