Kaip perkelti sveikąjį skaičių kaip „ConverterParameter“?

Bandau susieti visą skaičių:

 <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter=0}" /> 

ir mano konverteris:

 [ValueConversion(typeof(int), typeof(bool))] public class IntToBoolConverter : IValueConverter { public object Convert(object value, Type t, object parameter, CultureInfo culture) { return value.Equals(parameter); } public object ConvertBack(object value, Type t, object parameter, CultureInfo culture) { return value.Equals(false) ? DependencyProperty.UnsetValue : parameter; } } 

problema ta, kad kai mano konverteris vadinamas parametru, tai yra eilutė. Man reikia, kad jis būtų sveikas skaičius. Žinoma, galiu suprasti eilutę, bet man reikia?

ačiū už bet kokią pagalbą konstanta

74
20 окт. nustatytas į akonsu spalio 20 d. 2010-10-20 17:30 „10, 5:30 val. 2010-10-20 17:30
@ 5 atsakymai

Čia eik!

 <RadioButton Content="None" xmlns:sys="clr-namespace:System;assembly=mscorlib"> <RadioButton.IsChecked> <Binding Path="MyProperty" Converter="{StaticResource IntToBoolConverter}"> <Binding.ConverterParameter> <sys:Int32>0</sys:Int32> </Binding.ConverterParameter> </Binding> </RadioButton.IsChecked> </RadioButton> 

Apgaulė yra įtraukti pagrindinės sistemos tipų vardų erdvę ir tada įrašyti bent elementą „ConverterParameter“.

82
02 авг. atsakymas duotas jpierson 02 rug . 2011-08-02 17:58 '11, 17:58, 2011-08-02 17:58

Jei norite išsamumo, kitas galimas sprendimas (galbūt su mažesniu simbolių rinkiniu):

 <Window xmlns:sys="clr-namespace:System;assembly=mscorlib" ...> <Window.Resources> <sys:Int32 x:Key="IntZero">0</sys:Int32> </Window.Resources> <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter={StaticResource IntZero}}" /> 

(Žinoma, Window galima pakeisti „ IntZero , o „ IntZero galima apibrėžti arčiau faktinės naudojimo vietos.)

35
10 нояб. Atsakymas pateikiamas Vlad 10 lapkričio. 2014-11-10 17:43 '14, 17:43 2014-11-10 17:43

Nesate tikri, kodėl WPF žmonės linkę nenaudoti MarkupExtension . Tai puikus sprendimas daugeliui problemų, įskaitant čia minėtą problemą.

 public sealed class Int32Extension : MarkupExtension { public Int32Extension(int value) { this.Value = value; } public int Value { get; set; } public override Object ProvideValue(IServiceProvider sp) { return Value; } }; 

Jei šis žymėjimo plėtinys yra „ XAML vardų srityje „m“, tada originalus plakato pavyzdys atrodytų taip:

 <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter={m:Int32 0}}" /> 

Tai veikia, nes plėtinio žymėjimo analizatorius gali matyti tvirtą konstruktoriaus argumento tipą ir jį atitinkamai konvertuoti, o rišiklio keitimoParameter argumentas (mažiau informatyvus) nustatytas į objektą.

19
01 апр. Glenn Slayden atsakė 01 Bal. 2015-04-01 03:54 '15 at 3:54 2015-04-01 03:54

Nenaudokite value.Equals . Naudoti:

  Convert.ToInt32(value) == Convert.ToInt32(parameter) 
4
20 окт. Atsakyti Aliostad 20 oct. 2010-10-20 17:36 '10, 17:36, 2010-10-20 17:36

Būtų malonu kažkaip išreikšti informaciją apie „ConverterValue“ XAML, bet nemanau, kad tai yra įmanoma šiuo metu. Todėl manau, kad turite analizuoti konverterio objektą savo tikėtam tipui naudodami tam tikrą vartotojo logiką. Nematau jokio kito būdo.

0
20 окт. atsakymas pateikiamas SKG 20 okt. 2010-10-20 17:54 '10, 17:54, 2010-10-20 17:54

Peržiūrėkite kitus klausimus apie „ arba užduokite klausimą