2014-12-29 4 views
0

Я сражался с определенной проблемой с пользовательским контролем, которым я не могу справиться.Пользовательский элемент управления Silverlight Binding Issue Lightswitch

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

Я сузил проблему до одной строки кода, которая на самом деле является той, которая вызывает проблемы.

private readonly MainPageViewModel vm; 
    public MainPage() 
    { 
     InitializeComponent(); 
     vm = new MainPageViewModel(); 
     DataContext = vm; 
    } 

это переопределение DataContext (используя MVVM шаблон, чтобы открыть главную страницу VM).

, когда я удаляю переопределение datacontext, тогда моя привязка работает отлично, но все другие функциональные возможности управления работают неправильно.

теперь ясно, что я могу что-то делать или я что-то упускаю, с вашей помощью и опытом, надеясь переустановить это.

Вот часть XAML пользовательского элемента управления, когда im привязка к моему экрану, может ли быть так, что при переопределении datacontext мне нужно добавить Source к моему привязке, если да, то какой источник?

<controls:TabItem Header="introduction" 
           Tag="WELCOME TO THE INSERT PRODUCT WIZARD" 
           Visibility="Collapsed" > 
       <StackPanel> 
        <TextBox x:Name="txtTest" Width="300" Text="{Binding Path=Screen.intBindTest, Mode=TwoWay}"/> 
        <ComboBox ItemsSource="{Binding Screen.vw_COUNTRIES, Mode=OneWay}" 
           SelectedItem="{Binding Screen.vw_COUNTRIES.SelectedItem, Mode=TwoWay}" 
           DisplayMemberPath="COUNTRYNAME"/> 
       </StackPanel> 


      </controls:TabItem> 

Мой вопрос не как я связать SilverLight пользовательские элементы управления, моя проблема в том, когда я явно присвоить DataContext быть ViewModel то LightSwitch переплеты не работает, но если я удалить его, то Lightswitch может связать нормально, но остальная часть элемента управления сломана.

В частности, мне нужно, как явно назначить lightswitch datacontext в текстовое поле с XAML или любым другим способом.

спасибо заблаговременно.

ответ

0

Я нашел решение своей проблемы.

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

Решение было после копания внутри Microsoft.LightSwitch.Client.Internal DLL и поиск родительского элемента управления для пользовательского элемента управления - LS.

после этого я добавил DLL к моему решению, поэтому я мог бы ссылаться на эту DLL и использовать тип объекта, а так же добавил привязку datacontext.

<TextBox Grid.Row="1" x:Name="txtTest" Width="300" Text="{Binding Path=Screen.intBindTest, Mode=TwoWay}" 
          DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
         AncestorType=LS:ScreenCustomContentControl ,AncestorLevel=1}, Path=DataContext}"/> 
         <ComboBox Grid.Row="2" Name="cmbTest" ItemsSource="{Binding Screen.vw_COUNTRIES, Mode=TwoWay}" 
           SelectedItem="{Binding Screen.vw_COUNTRIES.SelectedItem, Mode=TwoWay}" 
           DisplayMemberPath="COUNTRYNAME" 
           DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
         AncestorType=LS:ScreenCustomContentControl ,AncestorLevel=1}, Path=DataContext}"/> 

Это решило мою проблему.

0
  1. Когда вы добавляете настраиваемый элемент управления на свой экран, оставьте источник привязки на экране.
  2. Убедитесь, что у вас есть коллекция 'vw_COUNTRIES' на экране.
+0

Пробовал это, все еще не нужно, проблема в том, что когда вы переопределяете datacontext с помощью vm, он стирает экранный файл данных. –