2014-12-29 47 views
0

我一直在与自定义控件绑定的某个问题斗争,我似乎无法解决。自定义Silverlight控件绑定问题Lightswitch

我试图绑定我从网上下载到我的一个屏幕的向导控件,但由于某种原因绑定不会通过。

我已经将问题的范围缩小到了一行代码,实际上是导致问题的代码。

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

它被重写的datacontext(使用MVVM模式打开主页VM)。

当我删除datacontext覆盖,然后我的绑定完美,但所有其他控制功能不能正常工作。

现在很明显,我可能做错了什么,或者我错过了一些事情,希望借助您的帮助和专业知识来解决这个问题。

这里是自定义控件的XAML的一部分,当我绑定到我的屏幕,是否可以与datacontext覆盖发生我需要添加源到我的绑定,如果是的话源是什么?

<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是视图模型则LightSwitch的绑定没有工作,但如果我再删除它的LightSwitch可以绑定罚款其余的控制权被打破。

几乎我需要的是如何从XAML或其他任何方式明确地将lightswitch datacontext分配到我的文本框中。

非常感谢。

回答

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

试过了,仍然没有去,问题是,当你用vm覆盖datacontext时,它会擦除​​屏幕的datacontext。 –