2014-12-29 77 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。 –