使用Prism,我实现了一个View,Model和Presenter,就像StockTraderRI项目一样。我的问题是我正在尝试将stackpanel数据绑定到ObservableCollection对象,但没有显示任何字符串。
这是我的代码:
PresentationModel代码:
public InfoBarPresentationModel(IInfoBarView view, IEventAggregator eventAggregator)
{
this.View = view;
this.View.Model = this;
InfoBarItems = new ObservableCollection<string>();
InfoBarItems.Add("Test 1");
InfoBarItems.Add("Test 2");
}
public IInfoBarView View { get; set; }
public ObservableCollection<string> InfoBarItems { get; set; }
XAML代码:
<ItemsControl x:Name="list" ItemsSource="{Binding InfoBarItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我尝试了很多绑定组合,但还没弄清楚为什么我的字符串永远不会出现。我做错了什么?
瑞克
答案 0 :(得分:0)
以下XAML应该有效:
<ItemsControl x:Name="list" ItemsSource="{Binding Path=InfoBarItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=.}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
与您的方法的不同之处在于:
- DataTemplate定义中没有StackPanel
- 添加了TextBox绑定的绑定路径
答案 1 :(得分:0)
事实证明,如果我在分配模型之前创建我的集合,它就可以工作。
原始代码:
public InfoBarPresentationModel(IInfoBarView view, IEventAggregator eventAggregator)
{
this.View = view;
this.View.Model = this;
InfoBarItems = new ObservableCollection<string>();
InfoBarItems.Add("Test 1");
InfoBarItems.Add("Test 2");
}
新代码:
public InfoBarPresentationModel(IInfoBarView view, IEventAggregator eventAggregator)
{
InfoBarItems = new ObservableCollection<string>();
InfoBarItems.Add("Test 1");
InfoBarItems.Add("Test 2");
this.View = view;
this.View.Model = this;
}
你的xaml和我原来的xaml工作正常。
谢谢。
瑞克
答案 2 :(得分:0)
您是PresentationModel类实现INotifyProperytChanged
吗?或者你是DependencyProperty
的集合?如果不是这种情况,那么视图将永远不会被通知您创建了一个集合。
这就是为什么如果你设置集合之前它将绑定到视图它将工作,而不是相反。我确实认为,除非在绑定时修复所有属性,否则不要制作PresentationModel INotifyPropertyChanged
。