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。检查它是否有效,否则您需要找到其他替代方案。