Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# mvvm observablecollection和binding_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# mvvm observablecollection和binding

C# mvvm observablecollection和binding,c#,wpf,xaml,mvvm,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;

我有一个模型:

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();}
    }
}
<DataTemplate>
    <controls:TableControl DataContext="{Binding}" 
        TableNumber="{Binding Id}"
        North="{Binding North}"
        East="{Binding East}"
        South="{Binding South}"
        West="{Binding West}"
        />
</DataTemplate>
表列表中声明的另一个视图模型:

            Tables = new ObservableCollection<Table>();
<DataTemplate>
    <controls:TableControl DataContext="{Binding}" 
        TableNumber="{Binding Id}"
        North="{Binding North}"
        East="{Binding East}"
        South="{Binding South}"
        West="{Binding West}"
        />
</DataTemplate>

确实没有绑定。

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

<DataTemplate>
    <controls:TableControl DataContext="{Binding}" 
        TableNumber="{Binding Id}"
        North="{Binding North}"
        East="{Binding East}"
        South="{Binding South}"
        West="{Binding West}"
        />
</DataTemplate>
如果在用户控件(例如
TableControl.xaml.cs
)文件的代码后面设置了
this.DataContext=this之类的
DataContext,则它也可能不起作用
使用户控件不使用
表的DataContext
集合

<DataTemplate>
    <controls:TableControl DataContext="{Binding}" 
        TableNumber="{Binding Id}"
        North="{Binding North}"
        East="{Binding East}"
        South="{Binding South}"
        West="{Binding West}"
        />
</DataTemplate>
您可以使用检查用户控件的DataContext中到底有什么内容
TableControl

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

<DataTemplate>
    <controls:TableControl DataContext="{Binding}" 
        TableNumber="{Binding Id}"
        North="{Binding North}"
        East="{Binding East}"
        South="{Binding South}"
        West="{Binding West}"
        />
</DataTemplate>
请尝试下面的内容,因为根据您的评论,
TableControl
的DataContext是冲突的:

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


什么是
ViewModelBase
?您需要在
OnPropertyChanged()中指定属性名称。这是通过反射或其他方式在
ViewModelBase
中发生的吗?发布
TableControl
@PoweredByOrange的代码和XAML,这是一个@HighCore,他没有提到他正在使用.NET 4.5。这些小错误对于WPF初学者来说很常见。看起来是正确的。你的问题可能在别处。确保打开数据绑定的调试消息:下一步,重新运行并检查输出窗口,看看有什么错误;还有一些依附的软岩。没什么有趣的:)@alerya更新了答案,根据您的评论添加了XAML。检查它是否有效,否则您需要找到其他替代方案。