【问题标题】:WP7 binding UserControl using MVVM [duplicate]WP7使用MVVM绑定UserControl [重复]
【发布时间】:2011-06-09 11:44:22
【问题描述】:

可能重复:
Binding between Usercontrol with listbox and parent control (MVVM)

我正在尝试将 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 列表中没有填充。 我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    现在还早,我还没有喝咖啡,但在我看来,您可能需要一个用于列表项的数据模板。您已经定义了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?我看到你在其中一个 cmets 中提到了{StaticResource = Locator}。知道这会很有帮助。

    您可能会尝试的另一件事是检查您的UserControl 是否在它自己的命名空间中。如果你把它放在UserControl 文件夹中,它可能是。当 UserControlViewModel 不在同一个命名空间中时,我在绑定 UserControl 时遇到了一些问题。

    【讨论】:

    • 将此添加到主页 无需设置数据模板即可正常工作,并且对 UC 没有帮助。
    • 是的,我正在使用 MVVM Light,是的,UC 在另一个 NS 中。我会试着把它移过来。
    • 如果您仍在尝试解决这个问题,请发布一个指向重复问题的示例项目的链接。 T 开始构建我自己的,但有太多我不知道你如何构建应用程序的部分。
    猜你喜欢
    • 2012-07-10
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2016-05-25
    • 2016-08-15
    相关资源
    最近更新 更多