Пользовательский обязательный класс не работает правильно

Но имейте в виду, что назначение переменных функции, объявленной глобальной, только внедряет в пространство имен модуля. Вы не можете использовать эти переменные глобально после импорта:

from that_module import call_that_function
call_that_function()
print(use_var_declared_global)

, и вы получите

NameError: global name 'use_var_declared_global' is not defined

. Вы должны были бы сделать импорт снова, чтобы импортировать также эти новые «глобалы модуля». Встроенный модуль является «реальным глобальным», хотя:

class global_injector:
    '''Inject into the *real global namespace*, i.e. "builtins" namespace or "__builtin__" for python2.
    Assigning to variables declared global in a function, injects them only into the module's global namespace.
    >>> Global= sys.modules['__builtin__'].__dict__
    >>> #would need 
    >>> Global['aname'] = 'avalue'
    >>> #With
    >>> Global = global_injector()
    >>> #one can do
    >>> Global.bname = 'bvalue'
    >>> #reading from it is simply
    >>> bname
    bvalue

    '''
    def __init__(self):
        try:
            self.__dict__['builtin'] = sys.modules['__builtin__'].__dict__
        except KeyError:
            self.__dict__['builtin'] = sys.modules['builtins'].__dict__
    def __setattr__(self,name,value):
        self.builtin[name] = value
Global = global_injector()
7
задан 19 June 2009 в 13:44
поделиться

3 ответа

после некоторого дальнейшего тестирования с расширениями разметки эта проблема возникала у меня снова и снова, и после еще нескольких поисков в Google я думаю, что нашел подтверждение, что это ошибка в Visual Studio дизайнер. Всем, кому это интересно, стоит взглянуть на

http://www.hardcodet.net/2008/04/nested-markup-extension-bug

С уважением, Рене

6
ответ дан 7 December 2019 в 05:27
поделиться

Наследование от привязки, вероятно, не лучшее решение. Если вы просто хотите обойти объявление конвертера как статического ресурса, попробуйте создать синглтон вашего конвертера и использовать его так:

Text="{Binding Path=Foo, Converter={x:Static local:MyConverter.Converter}}"

В качестве альтернативы вы можете попробовать расширение разметки, как показано здесь .

2
ответ дан 7 December 2019 в 05:27
поделиться

Спасибо за ваш ответ!

В общем, у меня нет проблем с синтаксисом выражения привязки и объявлением преобразователя перед его использованием. То, что я написал выше, - это просто хороший результат решения моей основной проблемы. Я хочу создать свой собственный класс Binding и передать ему свой собственный преобразователь так же, как я бы сделал это с исходным классом Binding.

Я просто хочу понять сообщение об ошибке, которое представляет мне VS. Я думаю, у этого должна быть причина: либо я делаю что-то не так, либо есть ошибка в Visual Studio / WPF.

До сегодняшнего дня я был почти уверен, что проблема заключается в компьютере. Но я разместил этот вопрос в двух других группах пользователей (также в MSDN на форуме WPF). До сих пор отвечаете только вы. И вот я пришел к мысли, Рене

0
ответ дан 7 December 2019 в 05:27
поделиться