Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF-数据模板中的绑定属性_Wpf_Xaml_Binding_Datatemplate_Resourcedictionary - Fatal编程技术网

WPF-数据模板中的绑定属性

WPF-数据模板中的绑定属性,wpf,xaml,binding,datatemplate,resourcedictionary,Wpf,Xaml,Binding,Datatemplate,Resourcedictionary,我正在构建一个窗口,其中包含一组共享相同布局的行,但它们的内容应该不同,例如: | (Label Content:)"Name1" | (Textbox Text)"SomeText" | | (Label Content:)"Name5" | (Textbox Text)"OtherText" | 我定义了一个DataTemplate,它基本上包含一个指定每列大小的网格,包含它所需要的所有元素(一些标签、文本框等),并设置它们的公共属性 <UserControl.Resources&

我正在构建一个窗口,其中包含一组共享相同布局的行,但它们的内容应该不同,例如:

| (Label Content:)"Name1" | (Textbox Text)"SomeText"  |
| (Label Content:)"Name5" | (Textbox Text)"OtherText" |
我定义了一个
DataTemplate
,它基本上包含一个指定每列大小的网格,包含它所需要的所有元素(一些标签、文本框等),并设置它们的公共属性

<UserControl.Resources>
    <DataTemplate x:Key="AxisRangeEntry" x:Shared="False">
            <Grid HorizontalAlignment="Stretch" VerticalAlignment="Top">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50" />
                    <ColumnDefinition Width="50" />
                    ....
                </Grid.ColumnDefinitions>
                <Label x:Name="MyLabel" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center">
                ...
                <TextBox x:Name="MyTextbox" Grid.Column="2" Width="110" HorizontalContentAlignment="Right" />
                ...
           </Grid>
    </DataTemplate>
</UserControl.Resources>

....
...
...
然后在我的窗口中,我开始将数据模板作为ContentControl添加到堆栈面板中:

<ContentControl ContentTemplate="{StaticResource AxisRangeEntry}" />
<ContentControl ContentTemplate="{StaticResource AxisRangeEntry}" />
....

....
我正在努力弄清楚如何定义
DataTemplate
中控件的某些属性,使其可绑定,并在开始定义
ContentControl
时将其绑定到静态值/外部属性。实际上,每个
ContentControl
都需要能够定义像
MyLabel
内容和
MyTextbox
文本这样的内容

我以前创建过CustomControls,它对它们有
dependencProperties
,当我在另一个窗口中添加它们时,可以绑定到它。使用
DataTemplate
时,我不确定如何将这些字段定义为可绑定字段,并在包含新版本的模板时绑定到它们


任何帮助都将不胜感激。

听上去,您没有使用MVVM模式

对于您的情况,我建议使用MVVM——看看这篇文章,快速介绍适合您的情况的内容(带有ItemTemplate的ItemsControl)

您要做的是创建一个ObserveObject来表示每一行,然后将ObserveObject集合绑定到ItemsControl的ItemsSource,并将ItemTemplate设置为您创建的DataTemplate。在DataTemplate中,您将指定对ObserveObject行的属性的每个绑定,WPF将绑定到每一行的正确实例


无论哪种方式,DataTemplates主要用于模板化特定的数据类型。如果确实需要以这种方式实现视图,则可以使用具有依赖属性的自定义UserControl。

您提供了要绑定的项的动态特性,因此此答案将尝试在参数集内提供指导

…[定义]的某些属性 要绑定到的DataTemplate内的控件

  • 在模板中,绑定将默认为父数据上下文。简单地说
    {Binding}
    将默认为数据上下文中的该项。如果绑定项具有特定属性,则使用
    {Binding MyPropertyName}
    。只需验证父级或其祖先具有有效的数据上下文
  • 想象一下数据模板在它的最终位置,就像你在那里硬编码一样。它的行为将是一样的
  • 当我开始定义 内容控件

  • 因为这听起来像是在自定义控件中,所以datacontext将是最终使用者的datacontext,并且很可能datacontext将一文不值
  • 如果它位于自定义控件上,则使用命名绑定并将其绑定到控件上的属性。例如,控件的名称在XAML中被命名为“MyControl”(
    x:name=“MyControl”
    ),在模板绑定中,可以直接指向它的路径,例如

    {Binding MyCustomControlDependencyProperty,ElementName=MyControl}

  • 创建了具有依赖项属性的CustomControls

    使用上述规则,您仍然可以(而且应该)使用自定义控件的依赖属性将信息从使用者传递到将动态使用它的datatemplate