我一直在与自定义控件绑定的某个问题作斗争我似乎无法解决。
我试图将从网上下载的向导控件绑定到我的某个屏幕,但出于某种原因绑定不会通过。
我已将问题缩小到一行代码,实际上是导致问题的代码。
private readonly MainPageViewModel vm;
public MainPage()
{
InitializeComponent();
vm = new MainPageViewModel();
DataContext = vm;
}
它覆盖了datacontext(使用MVVM模式打开主页VM)。
当我删除datacontext覆盖时,我的绑定工作完美,但所有其他控制功能都无法正常工作。
现在很明显我可能做错了什么或者我错过了什么,在你的帮助和专业知识的帮助下我希望能够解决这个问题。
当我绑定到我的屏幕时,这是自定义控件的XAML的一部分,可能是因为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可以绑定好但其余的控制权被打破了。
我需要的是如何从XAML或任何其他方式明确地将lightswitch datacontext分配到我的文本框中。
提前多多谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
我找到了解决问题的方法。
如果您没有为其明确指定上下文,则用户控件仅获取屏幕数据上下文,默认情况下它将获取它。 但当我用我的VM显式覆盖它时,上下文不再来自屏幕了。
解决方案是在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}"/>
这解决了我的问题。