可能重复:
Binding between Usercontrol with listbox and parent control (MVVM)
我正在尝试将UserControl绑定到主页的viewmodel上的属性 代码如下所示:
UserControl xaml:
<UserControl x:Class="myUserControl" ....>
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" >
<ListBox Name="myListBox" ItemsSource="{Binding Path=myItemsSource}"/>
</Grid>
</UserControl>
代码隐藏看起来像这样:
public partial class myUserControl : UserControl
{
public static DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("myItemsSource",
typeof(IEnumerable), typeof(myUserControl), null);
public IEnumerable myItemsSource
{
get
{
return (IEnumerable)GetValue(ItemsSourceProperty);
}
set
{
SetValue(ItemsSourceProperty, value);
}
}
}
UC在主页中使用如下:
<phone:PhoneApplicationPage DataContext="{Binding myViewModel, Source={StaticResource Locator}}" ....>
<Grid x:Name="ContentPanel">
<uc:myUserControl x:Name="ucList" myItemsSource="{Binding Path=DataList}"/>
</Grid>
</phone:PhoneApplicationPage>
并且主页面的viewModel如下所示:
public class myViewModel : ViewModelBase
{
public ObservableCollection<myObject> DataList
{
get
{
return _datalist;
}
set
{
if (_dataList != value)
{
_dataList = value;
RaisePropertyChanged("DataList");
}
}
}
}
但是当设置了DataList属性时,未填充uc List。 我错过了什么?
答案 0 :(得分:0)
现在还早,我还没喝咖啡,但在我看来,你可能需要一个列表项的数据模板。您已定义ItemsSource
但未告知控件如何自行呈现项目。
您的清单包含哪些内容?尝试将数据模板绑定到列表项属性之一,如下所示:
<UserControl x:Class="myUsercontrol" ....>
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" >
<ListBox Name="myListBox" ItemsSource="{Binding Path=myItemsSource}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SomeListItemProperty}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
编辑:您是否偶然使用MVVM Light?我看到你在其中一条评论中提到了
{StaticResource = Locator}
。这将有助于了解。
您可能尝试的另一件事是检查您的UserControl
是否在其自己的命名空间中。如果你把它放在UserControl
文件夹中,它可能是。当UserControl
与ViewModel
不在同一名称空间时绑定{{1}}时,我遇到了一些问题。