与Datatemplate成员绑定

本文关键字:绑定 成员 Datatemplate | 更新日期: 2023-09-27 18:29:02

我有一个类似的数据模板

public class DefaultDataTemplate : DataTemplate
{
    public string Name
    {
        get;
        set;
    }
}

我在xaml中使用,就像这个

   <!-- Default DataTemplate -->
    <DataTemplate x:Key="DefaultDataTemplate">
        <Grid Margin="4" MinHeight="25">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"  />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding Name}" FontWeight="Bold"  />               
        </Grid>
    </DataTemplate>

我想用我的数据模板的"Name"属性进行绑定,但现在它绑定到了我的列表视图项的名为"Name"的属性。有人能帮助我找到正确的方法或语法吗?

与Datatemplate成员绑定

DataTemplateDataContext是它正在模板化的DataObject,您必须绑定回DataTemplate,或者在本例中绑定回DefaultDataTemplate才能访问该属性。

尝试:

Text="{Binding Name, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataTemplate}}}

Text="{Binding Name, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type myNamespace:DefaultDataTemplate }}}

您没有使用模板,您只是给了模板与类相同的键名。

此外,自定义数据模板应该具有要绑定的依赖属性。

你真的想这么做吗:

<ListBox ItemsSource="{Binding Persons}">
    <ListBox.DataTemplate>
        <DataTemplate >
            <Grid Margin="4" MinHeight="25">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"  />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="Name" FontWeight="Bold"  />
                <TextBox Margin="8,0" Grid.Column="1" Text="{Binding Name}" />
            </Grid>
        </DataTemplate>
    </ListBox.DataTemplate>
</ListBox>

或者

<Window.Resources>
    <DataTemplate x:Key="DefaultDataTemplate">
        <Grid Margin="4" MinHeight="25">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"  />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <TextBlock Text="Name" FontWeight="Bold"  />
            <TextBox Margin="8,0" Grid.Column="1" Text="{Binding Name}" />
        </Grid>
    </DataTemplate>
</Window.Resources>
 <ListBox ItemsSource="{Binding Persons}" DataTemplate="{StaticResource DefaultDataTemplate}"/>

假设Person类有一个属性Name,Persons属性是Observable<Person>