정수를 ConverterParameter로 전달하는 방법은 무엇입니까?
정수 속성에 바인딩하려고합니다.
<RadioButton Content="None"
IsChecked="{Binding MyProperty,
Converter={StaticResource IntToBoolConverter},
ConverterParameter=0}" />
내 변환기는 다음과 같습니다.
[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;
}
}
문제는 내 변환기가 호출 될 때 매개 변수가 문자열이라는 것입니다. 정수가 필요합니다. 물론 문자열을 구문 분석 할 수 있지만 그래야합니까?
도움을 주셔서 감사합니다 konstantin
여기 요!
<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>
트릭은 기본 시스템 유형에 대한 네임 스페이스를 포함시킨 다음 적어도 ConverterParameter 바인딩을 요소 형식으로 작성하는 것입니다.
완전성을 위해 가능한 한 가지 해결책이 더 있습니다.
<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}}" />
(물론, Window
로 대체 할 수 있습니다 UserControl
, 그리고 IntZero
가까운 실제 사용의 장소로 정의 할 수 있습니다.)
확실하지 왜 WPF
사람들은 사용으로 꺼렸되는 경향이있다 MarkupExtension
. 여기에 언급 된 문제를 포함하여 많은 문제에 대한 완벽한 솔루션입니다.
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; }
};
If this markup extension is available in XAML
namespace 'm', then the original poster's example becomes:
<RadioButton Content="None"
IsChecked="{Binding MyProperty,
Converter={StaticResource IntToBoolConverter},
ConverterParameter={m:Int32 0}}" />
This works because the markup extension parser can see the strong type of the constructor argument and convert accordingly, whereas Binding's ConverterParameter argument is (less-informatively) Object-typed.
Don't use value.Equals
. Use:
Convert.ToInt32(value) == Convert.ToInt32(parameter)
It would be nice to somehow express the type information for the ConverterValue in XAML, but I don't think it is possible as of now. So I guess you have to parse the Converter Object to your expected type by some custom logic. I don't see another way.
참고URL : https://stackoverflow.com/questions/3978937/how-to-pass-an-integer-as-converterparameter
'IT story' 카테고리의 다른 글
SQL Server 테이블 생성 날짜 쿼리 (0) | 2020.09.13 |
---|---|
p4v에서 특정 변경 목록 번호를 어떻게 표시합니까? (0) | 2020.09.13 |
coffeescript의 정적 클래스 및 메서드 (0) | 2020.09.13 |
Ruby-다차원 해시 액세스 및 nil 객체 액세스 방지 (0) | 2020.09.13 |
UITableView 대신 UICollectionView를 사용하는 경우 (0) | 2020.09.13 |