【问题标题】:Binding with Datatemplate member与 Datatemplate 成员绑定
【发布时间】:2013-08-24 05:34:27
【问题描述】:

我有一个这样的数据模板

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>

我想与我的数据模板的“名称”属性进行绑定,但现在它绑定到我的列表视图项的名为“名称”的属性。任何人都可以帮助正确的方式或语法

【问题讨论】:

    标签: c# wpf mvvm datatemplate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      你真的打算这样做吗:

      <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&lt;Person&gt;

      【讨论】:

        猜你喜欢
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 2011-08-16
        • 2016-03-11
        • 2012-06-21
        • 2022-11-11
        • 2022-10-24
        • 1970-01-01
        相关资源
        最近更新 更多