mvvm observablecollection和binding

时间:2013-09-13 19:29:43

标签: c# wpf xaml mvvm

我有一个模特:

public class Table : ViewModelBase
{
    private int _id;
    private string _north;
    private string _east;
    private string _south;
    private string _west;

    public int Id
    {
        get
        {
            return _id;
        }
        set
        {
            _id = value; OnPropertyChanged();
        }
    }

    public string North
    {
        get { return _north; }
        set { _north = value; OnPropertyChanged();}
    }

    public string East
    {
        get { return _east; }
        set { _east = value; OnPropertyChanged();}
    }

    public string South
    {
        get { return _south; }
        set { _south = value; OnPropertyChanged();}
    }

    public string West
    {
        get { return _west; }
        set { _west = value; OnPropertyChanged();}
    }
}

Viewmodel也声明了表格列表:

            Tables = new ObservableCollection<Table>();

在XAML中:

<ScrollViewer.Resources>
                <ItemsPanelTemplate x:Name="MyWrapPanel">
                    <toolkit:WrapPanel MinWidth="250" Width="{Binding ViewportWidth, ElementName=MyScrollViewer}" />
                </ItemsPanelTemplate>
            </ScrollViewer.Resources>

            <ItemsControl ItemsSource="{Binding Tables}" ItemsPanel="{StaticResource MyWrapPanel}" Grid.RowSpan="2" Grid.Row="1">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <controls:TableControl 
                            TableNumber="{Binding Id}"
                            North="{Binding North}"
                            East="{Binding East}"
                            South="{Binding South}"
                            West="{Binding West}"
                            />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

        </ScrollViewer>

但是当我向Tables列表中添加元素时,一切正常。 但是

TableNumber="{Binding Id}"
North="{Binding North}"
East="{Binding East}"
South="{Binding South}"
West="{Binding West}"

确实没有约束力。

1 个答案:

答案 0 :(得分:0)

在名为Xaml的用户控件的TableControl文件中,在根元素中添加DataContext={Binding} ,我认为它应该可以正常工作(如果不是本)。

如果您将DataContext 设置 后面的用户控件(例如TableControl.xaml.cs)文件后面的代码设置为this.DataContext = this;,那么它也可能无法正常工作这使得用户控件不使用Tables集合的DataContext。

您可以使用this SO Answer检查用户控件TableControl的DataContext中究竟是什么。

修改

请尝试以下方法,因为根据您的评论,TableControl的DataContext存在冲突:

<DataTemplate>
    <controls:TableControl DataContext="{Binding}" 
        TableNumber="{Binding Id}"
        North="{Binding North}"
        East="{Binding East}"
        South="{Binding South}"
        West="{Binding West}"
        />
</DataTemplate>