// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #pragma once namespace CalculatorApp { namespace Common { public ref class ValidSelectedItemConverter sealed : public Windows::UI::Xaml::Data::IValueConverter { public: ValidSelectedItemConverter() { } private: virtual Platform::Object ^ Convert( Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert { // Pass through as we don't want to change the value from the source return value; } virtual Platform::Object ^ ConvertBack( Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack { if (value) { return value; } // Stop the binding if the object is nullptr return Windows::UI::Xaml::DependencyProperty::UnsetValue; } }; public ref class ValidSelectedIndexConverter sealed : public Windows::UI::Xaml::Data::IValueConverter { public: ValidSelectedIndexConverter() { } private: virtual Platform::Object ^ Convert( Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert { // Pass through as we don't want to change the value from the source return value; } virtual Platform::Object ^ ConvertBack( Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack { // The value to be valid has to be a boxed int32 value // extract that value and ensure it is valid, ie >= 0 if (value) { auto box = dynamic_cast(value); if (box && box->Type == Windows::Foundation::PropertyType::Int32) { int index = box->GetInt32(); if (index >= 0) { return value; } } } // The value is not valid therefore stop the binding right here return Windows::UI::Xaml::DependencyProperty::UnsetValue; } }; } }