Как связать сетку программно [дублировать]

Я иногда использую это поведение как альтернативу следующему шаблону:

singleton = None

def use_singleton():
    global singleton

    if singleton is None:
        singleton = _make_singleton()

    return singleton.use_me()

Если singleton используется только use_singleton, мне нравится следующий шаблон в качестве замены:

# _make_singleton() is called only once when the def is executed
def use_singleton(singleton=_make_singleton()):
    return singleton.use_me()

Я использовал это для создания экземпляров клиентских классов, которые обращаются к внешним ресурсам, а также для создания dicts или списков для memoization.

Поскольку я не думаю, что этот шаблон хорошо известен, Я поставил короткий комментарий для защиты от будущих недоразумений.

68
задан H.B. 27 September 2011 в 08:54
поделиться

2 ответа

Попробуйте это:

Binding myBinding = new Binding();
myBinding.Source = ViewModel;
myBinding.Path = new PropertyPath("SomeString");
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding);

Если вы укажете path (как и в конструкторе), ваш источник должен быть просто ViewModel, часть .SomeString оценивается по пути.

146
ответ дан Chris Klepeis 22 August 2018 в 05:02
поделиться
  • 1
    Вы также можете использовать txtText.SetBinding (TextBox.TextProperty, myBinding) вместо последней строки, просто чтобы уменьшить количество символов :) – Manish Dubey 12 March 2015 в 12:42
  • 2
    @ManishDubey Преимущество статического метода заключается в том, что первый параметр определяется как DependencyObject, поэтому он позволяет привязывать данные к объектам, которые не происходят из FrameworkElement или FrameworkContentElement (например, Freezables). – FreddyFlares 9 July 2017 в 12:54

вам нужно изменить источник на объект viewmodel:

myBinding.Source = viewModelObject;
9
ответ дан baalazamon 22 August 2018 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: