Caliburn.Micro установить статус элементов управления - PullRequest
1 голос
/ 25 февраля 2012

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

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

Да, используйте привязку.В XAML установите свойство Visibility для привязки к общедоступному свойству в модели представления и используйте стандарт BooleanToVisibilityConverter, чтобы преобразовать открытое свойство вашей логической модели представления в действительное значение Visibility.

ЕслиВы хотите создать общее решение, позволяющее настраивать видимость любого элемента представления, а затем один из вариантов - подключиться к процессу привязки Caliburn.Micro.Например, вы можете добавить еще один элемент в список вызовов ViewModelBinder.BindProperties.

Я не проверял это, но здесь это делается в методе Configure вашего загрузчика:

protected override void Configure()
{
    ViewModelBinder.BindProperties += (namedElements, viewModelType) =>
    {                    
        foreach (var element in namedElements)
        {
            // Generate a unique identifier for an element on a particular view
            string uniqueElementId = string.Format("{0}.{1}", viewModelType.FullName, element.Name);

            // Calculate the visibility of the element based on unique element id
            bool elementVisible = ...

            // Set the element's visibility
            element.Visibility = elementVisible ? Visibility.Visible : Visibility.Collapsed;
        }
    };

   ... other configuration code
}

BindProperties public Func получает коллекцию всехименованных элементов в вашем представлении, а также тип модели представления, к которой привязан.Вы можете использовать эту информацию для уникальной идентификации каждого элемента управления представлением, а затем рассчитать видимость на основе ваших данных на основе этого уникального идентификатора.

Обратите внимание, что установка Visibility каждого элемента в коде, подобного этому, переопределит любые привязкикоторые присутствуют в свойстве Visibility в XAML.

0 голосов
/ 25 февраля 2012

Я не знаю, чего именно вы хотите достичь этим. Тем не менее, используя (и изменяя) VisualState вида или C.M. Охранные методы могут сделать эту работу.

...