UWP:绑定用户控件中依赖项属性的可观察集合

时间:2017-04-30 17:05:15

标签: c# xaml binding uwp observablecollection

我在UWP中创建了一个用户控件,并使用可观察集合的类型从依赖属性添加了listview绑定。我在我的视图中使用了来自ViewModel的绑定值。但它不起作用。我在listview中看不到任何实体。 我的usercontrol的XAML:

<ListView ItemsSource="{x:Bind TaskLists}"
         SelectionMode="None" IsMultiSelectCheckBoxEnabled="False"  Name="ListofTasks" >

            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                    <Setter Property="VerticalAlignment" Value="Stretch"/>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.ItemTemplate>
                <DataTemplate >
 <TextBlock x:Name="title" FontWeight="SemiBold" 
FontSize="15" Text="{Binding Subject}"  Margin="7,5,0,0" />
</DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

C#codebehind:

 public ObservableCollection<TaskItem> TaskLists
    {
        get { return (ObservableCollection<TaskItem>)GetValue(TaskListsProperty); }
        set { SetValue(TaskListsProperty, value); }
    }

    // Using a DependencyProperty as the backing store for TaskLists.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TaskListsProperty =
        DependencyProperty.Register("TaskLists", typeof(ObservableCollection<TaskItem>), typeof(TaskList), new PropertyMetadata(null));

我的XAML视图中的UserControl用法:

        <Controls:TaskList TaskLists="{Binding TodayList ,Mode=TwoWay}" />

查看型号:

class TimeLineViewModel:INotifyPropertyChanged
{

    public TimeLineViewModel()
    {
        for (int i = 0; i < 10; i++)
        {
            TodayList.Add(new TaskItem() { ID = i, Detail = "Lurem IPsum Very cool app is under dev to be abnormal and very secret " + i, Subject = "This is Title of " + i
                , Imprtance = 1, Isdone = 2, Notify = 1, StartTime = DateTime.Now.AddHours(2), Tags= new ObservableCollection<string>() {"Tagone" , "tagtwo","tagThree","TagFour"}
            });

        }
    }
    ObservableCollection<TaskItem> TodayList = new ObservableCollection<TaskItem>();


    public event PropertyChangedEventHandler PropertyChanged;
}

1 个答案:

答案 0 :(得分:1)

FIXED: 我的ViewModel中有错误。 修复了视图模型中的代码:

class TimeLineViewModel:INotifyPropertyChanged
{

    public TimeLineViewModel()
    {
        TodayList = new ObservableCollection<TaskItem>();
        for (int i = 0; i < 10; i++)
        {
            TodayList.Add(new TaskItem() { ID = i, Detail = "Lurem IPsum Very cool app is under dev to be abnormal and very secret " + i, Subject = "This is Title of " + i
                , Imprtance = 1, Isdone = 2, Notify = 1, StartTime = DateTime.Now.AddHours(2), Tags= new ObservableCollection<string>() {"Tagone" , "tagtwo","tagThree","TagFour"}
            });

        }
    }

    public ObservableCollection<TaskItem> TodayList { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}