Nasıl bir numaralama için RadioButtons bağlamak için?
Böyle bir sıralama var:
public enum MyLovelyEnum
{
FirstSelection,
TheOtherSelection,
YetAnotherOne
};
Benim DataContext bir özelliği var:
public MyLovelyEnum VeryLovelyEnum { get; set; }
Ve WPF müvekkilim üç RadioButtons aldım.
<RadioButton Margin="3">First Selection</RadioButton>
<RadioButton Margin="3">The Other Selection</RadioButton>
<RadioButton Margin="3">Yet Another one</RadioButton>
Şimdi nasıl düzgün bir özellik RadioButtons bağlama iki yönlü bağlayıcı mı?
CEVAP
Daha fazla kabul gören bir cevap basitleştirebilirsiniz. Yerine yazdığımızda çeteleler gibi dizeleri xaml ve yaparken daha fazla iş senin dönüştürücü daha gerekli, açıkça geçişte numaralama değeri yerine bir dize temsilini ve CrimsonX olarak yorumladı, hatalarıyla atılan derleme zamanında yerine çalışma zamanı:
ConverterParameter={x:Static yerel:YourEnumType.Enum1}
<StackPanel>
<StackPanel.Resources>
<local:EnumToBooleanConverter x:Key="EnumToBooleanConverter" />
</StackPanel.Resources>
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum1}}" />
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter={x:Static local:YourEnumType.Enum2}}" />
</StackPanel>
Sonra da basitleştirmek dönüştürücü:
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? parameter : Binding.DoNothing;
}
}
Not - aynı kap içinde RadioButton öğesinin Birden fazla grup (17 Şubat '11):
Eğer radyo düğmeleri aynı üst kapsayıcı paylaşmak xaml, sonra bir seçme olacak de-tümünü seç diğer konteyner ise farklı bir özelliğe bağlı olan, hatta () içinde. Yani ortak bir özellik bir arada gibi kendi kabı içinde gruplandırılmış bağlı eğer Button panel yığın tutmaya çalışın. Eğer ilgili RadioButtons tek ebeveyn paylaşmak imkansız olduğu durumlarda kap, sonra bunları mantıksal olarak grup için ortak bir değer için her List of grup adı özelliğini ayarlayın.Not - Sıralama türü bir sınıf iç içe (28 '11) Yorum:
Eğer numaralama türü iç içe geçmiş bir sınıf (yerine doğrudan ad), belki de kullanabilir ' sözdizimi erişim numaralama XAML belirtildiği gibi bir (işaretli değil) cevap soru Unable to find enum type for static reference in WPF:. ben^>={X:Static yerel: . ConverterParameter ^b>YourClassYourNestedEnumType.Enum1}
Bu nedenle Microsoft Connect Issue ancak, VS2010 tasarımcı artık "Type 'local:YourClass YourNestedEnumType' was not found."
, belirten yük olacak ama projeyi başarıyla derlemek ve çalıştırmak. Tabii ki, eğer ad numaralama türünü taşımak mümkün doğrudan bu sorunu önleyebilirsiniz.
(16 Aralık '10): . Düzenle
Dönen Bağlama öneren anon için teşekkürler.Yapmaz yerine DependencyProperty.UnsetValue.(5 Nisan '11): . Düzenle
Basitleştirilmiş ConvertBack-eğer başka bir Üçlü Operatör kullanımı.(Jan 27 '12): . Düzenle
Eğer Numaralama bayrakları kullanarak, dönüştürücü aşağıdaki gibi olacaktırpublic class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((Enum)value).HasFlag((Enum)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? parameter : Binding.DoNothing;
}
}
(7 Mayıs '15): . Düzenle
Null bir Numaralama (yani . bu durumda ^strong>değilsorulan soru, ama olması gereken bazı durumlarda, örneğin ORM dönen boş, DB ya da ne zaman olabilir mantıklı bu programın mantığı değeri değil sağlanan), hatırlamak için bir eklenti ilk boş onay Dönüştürme Yöntemi ve dönüş uygun bool değeri, genellikle yanlış (eğer istemiyorsan herhangi bir radyo düğmesi seçili), aşağıdaki gibi: public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) {
return false; // or return parameter.Equals(YourEnumType.SomeDefaultValue);
}
return value.Equals(parameter);
}
Nasıl ASP.NET DropDownList denetimi iç...
Nasıl WPF combobox denetimi için bir n...
AngularJS : liste bağlamak için Nasıl ...
Nasıl NSURLConnection bağlamak için gü...
Nasıl WPF ters boolean özelliklerini b...