2017-08-03 66 views
0

我需要在ListView中動態使用DataTemplate。這個數據模板是一個用戶控件。我可以動態調用用戶控件。但我無法從用戶控件讀取項目。帶有綁定參數的UserControl動態數據模板

  <ListView.ItemTemplate> 
      <DataTemplate xmlns:local ="using:App4.Components" x:DataType="models:modelAuftrag"> 
       <local:ucPosListeConteiner Test="{x:Bind auftragNummer}"/> 
      </DataTemplate> 
     </ListView.ItemTemplate> 

我分享一個代碼作爲例子。

public static readonly DependencyProperty TestProperty = DependencyProperty.Register 
     (
      "Test", 
      typeof(string), 
      typeof(ucPosListeConteiner), 
      new PropertyMetadata("") 
     ); 


    public string Test 
    { 
     get { return (string)GetValue(TestProperty); } 
     set { SetValue(TestProperty, value);} 
    } 

And constructor;

viewModelUcPosListeConteiner model; 

    public ucPosListeConteiner() 
    { 
     this.InitializeComponent(); 
     model = new viewModelUcPosListeConteiner(); 
     this.DataContext = this; 
    } 

運行時;

System.InvalidCastException: Unable to cast object of type 'App4.Components.ucPosListeConteiner' to type 'App4.Models.modelAuftrag'. at App4.Components.ucPosListeNew.GetBindingConnector(Int32 connectionId, Object target)

如果我在構造函數中this.DataContext =此聲明,代碼給不是錯誤刪除。但是這次綁定在用戶控制中不起作用。

如何獲取傳出數據和UserControl中的綁定?

謝謝......

回答

0

我已經解決了。

我沒有使用this.DataContext = this;在構造函數中。

這裏是xaml代碼;

<DataTemplate x:Key="dt3" x:DataType="models:modelAuftrag"> 
     <local:ucPosListeConteiner Test="{x:Bind model}"></local:ucPosListeConteiner> 
    </DataTemplate> 

這是ucPosListeConteiner C#代碼;

public viewModelUcPosListeConteiner Test 
    { 
     get { return (viewModelUcPosListeConteiner)GetValue(TestProperty); } 
     set { SetValue(TestProperty, value); model = new modelPosListe(); model = value; } 
    } 

而且我結合使用C#的價值UserControl_Loaded

Binding myBinding = new Binding(); 

    private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     myBinding.Source = model; 
     myBinding.Path = new PropertyPath("test"); 
     myBinding.Mode = BindingMode.TwoWay; 
     myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
     BindingOperations.SetBinding(txtDeneme, TextBlock.TextProperty, myBinding); 
    } 

比我能綁定並獲得進口參數。