/// <summary>
        /// Enforces the RMPolicy by walking through the PolicyBinding and setting the
        /// IsBlockedByRM property on the associated Commands as appropriate.
        /// </summary>
        /// <param name="policyToEnforce"></param>
        internal void Enforce()
        {
            Invariant.Assert(
                _docViewer != null,
                "CommandEnforcer has no reference to the parent DocumentApplicationDocumentViewer.");

            // Get the current policy from the parent DocumentApplicationDocumentViewer
            RightsManagementPolicy policyToEnforce = _docViewer.RightsManagementPolicy;

            // Walk through the list of bindings
            foreach (PolicyBinding binding in _bindings)
            {
                // If the incoming policy allows this action, and it completely masks our binding policy,
                // then we set the IsBlockedByRM property to false, as this Command is permitted.
                binding.Command.IsBlockedByRM = !((policyToEnforce & binding.Policy) == binding.Policy);
            }

            // Enforce PrintScreen
            //   This will disable PrintScreen if neither AllowCopy or AllowPrint
            //   permission is granted.
            bool disablePrintScreen = !(((policyToEnforce & RightsManagementPolicy.AllowCopy)
                                         == RightsManagementPolicy.AllowCopy) ||
                                        ((policyToEnforce & RightsManagementPolicy.AllowPrint)
                                         == RightsManagementPolicy.AllowPrint));

            DisablePrintScreen(disablePrintScreen);
        }
        /// <summary>
        /// Constructor for a PolicyBinding.
        /// </summary>
        /// <param name="command">The Command to bind the permission to.</param>
        /// <param name="policy">The RMPolicy to be bound to the above Command.</param>
        public PolicyBinding(RoutedUICommand command, RightsManagementPolicy policy)
        {
            if (command == null)
            {
                throw new ArgumentNullException("command");
            }

            _command = command;
            _policy  = policy;
        }