通过带有绑定参数的 UserControl 的动态 DataTemplate

Dynamic DataTemplate via UserControl with Binding Parameter

我需要在 ListView 中动态使用 DataTemplate。此数据模板是一个用户控件。我可以动态调用用户控件。但是我无法从用户控件中读取项目。

         <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);}
    }

和构造函数;

 viewModelUcPosListeConteiner model;

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

运行时;

System.InvalidCastException: 无法将类型 'App4.Components.ucPosListeConteiner' 的对象转换为类型 'App4.Models.modelAuftrag'。 在 App4.Components.ucPosListeNew.GetBindingConnector(Int32 connectionId, Object target)

如果我在构造函数中删除 this.DataContext = 这个语句,代码不会给出错误。但是这次绑定在用户控件中不起作用。

如何在 UserControl 中获取传出数据和绑定?

谢谢...

我已经解决了

我没有用 this.DataContext = 这个;在构造函数中。

这是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; }
    }

并且我在 UserControl_Loaded

中将值与 C# 绑定
    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);
    }

我可以绑定并获取导入参数。