WP7使用MVVM绑定UserControl

时间:2011-06-09 11:44:23

标签: windows-phone-7 mvvm user-controls

  

可能重复:
  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。 我错过了什么?

1 个答案:

答案 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文件夹中,它可能是。当UserControlViewModel不在同一名称空间时绑定{{1}}时,我遇到了一些问题。