mvvm observablecollection and binding (不翻译)

31 浏览
0 Comments

mvvm observablecollection and binding (不翻译)

我有一个模型:

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(); }
    }
}

还有一个声明了Tables列表的ViewModel:

Tables = new ObservableCollection();

在XAML中:


    
        
    


    
        
            
        
    

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

但是

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

实际上并没有绑定。

0
0 Comments

问题出现的原因是在用户控件TableControl的XAML文件中,根元素中缺少DataContext={Binding}的设置。另外,问题也可能出现在用户控件的代码文件(例如TableControl.xaml.cs)中,当DataContext被设置为this.DataContext = this;时,用户控件将不会使用Tables集合的DataContext。

解决方法可以是在TableControl的XAML文件的根元素中添加DataContext={Binding}。另外,可以使用这个解答来检查TableControl的DataContext的具体内容。

以下是一个示例的解决方法,根据您的评论,TableControl的DataContext存在冲突:


    

以上是关于问题出现原因和解决方法的整理。

0