与Datatemplate成员绑定

时间:2013-08-24 05:34:28

标签: c# wpf mvvm datatemplate

我有一个像这样的数据模板

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>

我想与我的datatemplate的“Name”属性绑定,但是现在它绑定到我的List视图项的名为“Name”的属性。可以帮助正确的方法或语法

2 个答案:

答案 0 :(得分:1)

DataContext的{​​{1}}是它正在模板化的DataObject,您必须绑定回DataTemplate或在这种情况下DataTemplate才能访问该属性。

尝试:

DefaultDataTemplate

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

答案 1 :(得分:1)

您没有使用该模板,您只是为该模板提供了与该类相同的键名。

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

你的意思是这样做:

<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>