如果已经提出此问题,我找不到正确的搜索字词。
我有一个带有Observable集合的视图模型。
class MyViewModel
{
public ObservableCollection<OperationMessage> PendingMessages { get; set; }
}
我在我的页面后面的代码中设置了视图模型:
class MyPage : Page
{
public MyPage()
{
this.InitializeComponent();
MyViewModel myViewModel = new MyViewModel();
this.DefaultViewModel["MyViewModel"] = myViewModel;
}
}
此外,我有一个UserControl,其属性类型为OperationMessage:
public class MachineMessages : UserControl
{
public OperationMessage CurrentMessage { get; set; }
}
在MyPage.xaml.cs中,我想创建一个ItemsControl并将其绑定到ObservableCollection。
<ItemsControl x:Name="MessageList" ItemsSource="{Binding Path=ViewModel.PendingMessages}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<MyControls:MachineMessages DataContext="{Binding}" CurrentMessage="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
因此,对于OperationMessage类型的每个项目,我希望ItemsControl创建一个新的用户控件 - 这是有效的。但我还想将每个OperationMessage绑定到UerControl的属性CurrentMessage。所以这一行不起作用:
<MyControls:MachineMessages DataContext="{Binding}" CurrentMessage="{Binding}" />
那么如何将ObservableCollection的每个项绑定到UserControl的属性?
感谢。
答案 0 :(得分:1)
CurrentMessage
属性只能返回DataContext
对象:
public class MachineMessages : UserControl
{
public OperationMessage CurrentMessage
{
get { return DataContext as OperationMessage; }
}
}
您的DataTemplate看起来像这样,因为您不需要显式绑定DataContext:
<ItemsControl.ItemTemplate>
<DataTemplate>
<MyControls:MachineMessages />
</DataTemplate>
</ItemsControl.ItemTemplate>