我有一个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
属性)未显示。我认为文本框的Binding表达式是错误的。
上下文:我是XAML和WPF的新手。更一般地说:如何调试绑定问题与此类似。
感谢。
答案 0 :(得分:1)
删除ElementName=ListOfMessages
。每个项目的DataContext
将是ListOfMessages
中与ItemsSource
绑定的项目。
<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中的特定命名项。