我们在一个新的Silverlight项目中使用Caliburn.Micro,并且每个人都运行良好。 内置约定将按钮单击事件绑定到viewModel,但我不确定在datagrids和comboboxes上处理selectionChanged事件的最佳方法是什么。 目前,我绑定到所选项目并调 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
这比caliburn问题更像是MVVM问题,但这与我如何使用caliburn完成它有关。
我是Sliverlight / WP7开发的新手,所以如果我对自己的描述不够好,请告诉我。
我已经将caliburn.micro正确连接到带有phonecontainer / simplecontainer和viewmodel等的WP7应用程序中。我遇到的问题是如何正确地将模型集合绑定到屏幕上。
例如,我有以下模型:
SummaryItem
{
int Id
string Name
string Description
}
和对应的viewmodel:
SummaryViewModel : Conductor<IScreen>.Collection.OneActive
{
ObservableCollection<SummaryItem> SummaryItems;
OnInitialize()
{
SummaryItems = // REST api call to load items
}
}
和视图:
<ListBox x:Name="SummaryItems" Height="617" HorizontalAlignment="Left" VerticalAlignment="Top" Width="468" Background="Transparent">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Width="460" Height="120">
<Button.Content>
<StackPanel Orientation="Horizontal" Height="120" Width="400">
<TextBlock Text="{Binding Id}" Height="120" FontSize="40" Width="350" />
<TextBlock Text="{Binding Name}" Height="120" FontSize="40" Width="350" />
<TextBlock Text="{Binding Description}" FontSize="40" Width="50" TextAlignment="Right" />
</StackPanel>
</Button.Content>
</Button>
<ContentControl cal:View.Model="{Binding}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我的问题是,在silverlight / caliburn中将模型对象的集合绑定到将在导航中使用的视图的正确方法是什么? 如您所见,当有人单击其中一个按钮时,我将在下一个viewmodel上进行另一个rest api调用,以获取该项目数据并将其拍摄在屏幕上。 但是,我无法使用该列表框代码将项目显示在屏幕上。 我尝试使用ItemsSource = SummaryItems进行了工作,但似乎并不位于如何采样的过程中。 我已经在示例中注意到,Items属性用于视图模型的位置,我不确定它如何与模型对象集成。
我可能只是不清楚在所有这些情况下绑定如何工作以及caliburn如何与之集成。 有人能指出我正确的方向吗?
任何帮助将不胜感激。 谢谢!
肖恩
您需要将项目添加到ObservableCollection中,而不是通过调用创建一个新的ObservableCollection:
SummaryViewModel : Conductor<IScreen>.Collection.OneActive
{
private readonly ObservableCollection<SummaryItem> _items;
public ObservableCollection<SummaryItem> SummaryItems
{
get
{
return _items;
}
}
ObservableCollection<SummaryItem> SummaryItems;
public SummaryViewModel()
{
_items = new ObservableCollection<SummaryItem>();
}
protected override void OnInitialize()
{
var items = MyRestCall();
SummaryItems.Clear();
foreach(SummaryItem s in items)
{
SummaryItems.Add(s);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.