XAML:简单的 ItemsControl 绑定到 TextBox 不起作用:如何设置源 属性?

XAML: Simple ItemsControl Binding to TextBox does not work: how to set the source property?

我有一个试图绑定到文本框列表的 ObservableCollection。文本框显示但文本内容不显示。

XAML:

<Grid>
    <Grid.RowDefinitions >
        <RowDefinition />
    </Grid.RowDefinitions>
    <ItemsControl ItemsSource="{Binding Path=ListOfMessages}" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBox Text="{Binding Path=Message, ElementName=ListOfMessages}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

代码:

在 ViewModel 中:

public ObservableCollection<ApplicationLog> ListOfMessages { get; set; }

模型中:

public class ApplicationLog 
{
    public string Code { get; set; }
    public string Message { get; set; }
}

当我 运行 这个时,应用程序显示文本框(例如 4 个文本框,一个在另一个下方),但文本框中的文本(即 Message 属性) 未显示。我认为我的文本框绑定表达式是错误的。

上下文:我是 XAML 和 WPF 的新手。更一般地说:如何调试与此类似的绑定问题。

谢谢。

删除ElementName=ListOfMessages。每个项目的 DataContext 将是绑定到 ItemsSourceListOfMessages 中的项目。

<Grid>
    <Grid.RowDefinitions >
        <RowDefinition />
    </Grid.RowDefinitions>
    <ItemsControl ItemsSource="{Binding Path=ListOfMessages}" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <!-- DataContext will be ListOfMessages[0], [1], ..., [n] -->
                <TextBox Text="{Binding Path=Message}" /> 
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

ElementName 用于绕过 DataContext 并指向范围内的特定命名项目 XAML.