Каково преимущество установки DataContext в коде вместо XAML?

Просто добавьте этот код под кодом JS.

var autoslideIndex = 0;
autoSlides();  
function autoSlides() {
  var i;
  var slides= document.getElementsByClassName("mySlides");
  var dots = document.getElementsByClassName("dot");
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";  
  }
  autoslideIndex++;
  if (autoslideIndex > slides.length) {autoslideIndex  = 1}    
  for (i = 0; i < dots.length; i++) {
    dots[i].className = dots[i].className.replace(" active", "");
  }
  slides[autoslideIndex-1].style.display = "block";  
  dots[autoslideIndex-1].className += " active";
  setTimeout(autoSlides, 2000); // Change image every 2 seconds
}
13
задан akjoshi 8 February 2012 в 06:19
поделиться

5 ответов

Мне не нравится идея о том, что Expression Blend пытается создать экземпляры моих объектов данных.

Я установил DataContext через код, в котором я могу использовать Dependency Injection для внедрения правильных объектов, служб, поставщиков или того, что еще я использую для поиска своего кода.

5
ответ дан 1 December 2019 в 21:53
поделиться

Это может быть своего рода решение, использующее DataObjectProvider для маскировки того факта, что данные создаются вне XAML.

В нем будет указан тип DataContext, этого должно быть достаточно, чтобы Blend приобрел свойства.

Я еще не пробовал это, так что отнеситесь к этому с недоверием, но это, безусловно, стоит изучить.

1
ответ дан 1 December 2019 в 21:53
поделиться

Наличие его в кодовой части упрощает внедрение контекста данных с использованием единицы.

1
ответ дан 1 December 2019 в 21:53
поделиться

См. Статью Роба о данных времени разработки в Blend: http://www.robfe.com/2009/08/design-time-data-in-expression-blend-3 /

1
ответ дан 1 December 2019 в 21:53
поделиться

Вы можете (возможно, в 2009 году не смогли) получить лучшее из обоих миров, используя атрибут d: DataContext . Вам не нужно ничего из этого ViewModelLocator безумия , если вы еще не готовы к этому: -)

Сначала убедитесь, что у вас есть следующее пространство имен XML, определенное в вашем корневом элементе:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

Затем вы можете добавить следующий атрибут к элементу в вашем xaml:

d: DataContext = "{d: DesignInstance IsDesignTimeCreatable = True, Type = vm: CustomerInsightViewModel}"

В вашем внутреннем коде xaml:

    public CustomerInsightUserControl()
    {
        InitializeComponent();

        if (!DesignerProperties.IsInDesignTool)
        {
            DataContext = new CustomerInsightViewModel();
        }
    }

Затем в ViewModel:

    public CustomerInsightViewModel()
    {
        if (IsInDesignMode)
        {
            // Create design time data
            Customer = new Customer() {
                FirstName=... 
            }
        }
        else {
            // Create datacontext and load customers
        }
    }

Не пропустите IsDesignTimeCreatable = True , иначе Blend не создаст экземпляр вашего класса

15
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

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