다음과 같은 코드가 있다고 가정 해 보겠습니다.값 변환기. WPF가 한 번만 호출하도록합니다.
<ContextMenu IsEnabled="{Binding Converter={StaticResource SomeConverterWithSmartLogic}}">
따라서 변환기를 제외한 바인딩 정보를 지정하지 않았습니다. WPF가 한 번만 호출하도록 할 수 있습니까?
UPD :이 순간 나는 정적 필드
값 변환기의 상태를 저장 해요.다음과 같은 코드가 있다고 가정 해 보겠습니다.값 변환기. WPF가 한 번만 호출하도록합니다.
<ContextMenu IsEnabled="{Binding Converter={StaticResource SomeConverterWithSmartLogic}}">
따라서 변환기를 제외한 바인딩 정보를 지정하지 않았습니다. WPF가 한 번만 호출하도록 할 수 있습니까?
UPD :이 순간 나는 정적 필드
값 변환기의 상태를 저장 해요., 적어도 예를 들어, 정적 필드 등을 필요로하지 않습니다
[ValueConversion(typeof(double), typeof(double))]
public class DivisionConverter : IValueConverter
{
double? output; // Where the converted output will be stored if the converter is run.
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (output.HasValue) return output.Value; // If the converter has been called
// 'output' will have a value which
// then will be returned.
else
{
double input = (double)value;
double divisor = (double)parameter;
if (divisor > 0)
{
output = input/divisor; // Here the output field is set for the first
// and last time
return output.Value;
}
else return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
NotImplementedException을 throw하지 않습니다. 그것은 구현되지 않은 것을위한 것입니다. ConvertBack의 의도 된 구현이 던져 질 경우 효과적으로 구현됩니다. 올바른 예외는 NotSupportedException입니다. –
저는이 경우 변환이 모두 가능하기 때문에 구현되지 않았기 때문에 이에 대해 논쟁 할 수 있다고 생각합니다. 이 예제에서는 바로 여기에 'NotSupportedException'을 사용하는 것이 좋습니다. –
에 값 컨버터의 상태를 저장하고있어 당신은 한때 바인딩 설정 봤어? 즉 다른 장애를 일으키지 않는 경우에만 당신이 당신의 계산기를 쓸 수 한 번 컨버터해야 컨버터를 그런 식으로 할 경우
예, 도움이되지 않았습니다. –
컨텍스트 메뉴가 DataTemplate (잊어 버렸습니다)의 일부이기 때문에 컨텍스트 메뉴를 지정한 모든 항목에 대해 VC가 호출됩니다. 그리고 나서 선택 사항이 변경 될 때마다 ... –
이 경우 변환기에 자신의 "캐시"를 만들어야합니다. –
이 문제를 해결하는 대신 전역 변수^H^H^H^H^H^H^H^H^H^H^H^H^H의 문제를 해결 선택하는 이유가^H^Hstatic 필드 사용? –
IMHO 이것은 ViewModel에서 수행되어야하며 변환기를 모두 제거해야합니다. 이 인스턴스에서는 변환기가 현명하지 않아야합니다. –