我在主窗口中创建了WPF代码,现在我想使用MVVM。 我已将主窗口的xaml中的所有数据复制到用户控件并创建了新类 视图模型文件夹,其中包含xaml.cs类中的代码
在用户控件类中添加
public UserControl()
{
InitializeComponent();
this.DataContext = new ModelView();
}
目前有两个问题
1.在主窗口中我引用ListBox如下图所示,现在可能用户控件不知道它,我该如何解决呢?
listBox上的错误“无法访问静态上下文中的非静态属性项源。”
这里例如我在: ListBox.ItemsSource = _UsersList;
上有错误class ModelView
{
public ObservableCollection<User> _UsersList = new ObservableCollection<User>();
public ObservableCollection<User> UserList
{
get { return _UsersList; }
}
public void initUsers()
{
_UsersList.Add(new User {Name = "Mike"});
_UsersList.Add(new User {Name = "Jhon"});
ListBox.ItemsSource = _UsersList;
}
2.另外在视图模型中我从主窗口复制了一些代码,就像方法一样 在Previ中使用的DropText_PreviewDragEnter,以下在XAML中的ewDragEnter 现在有错误,我应该怎么避免呢?
<TextBox x:Name="FullName"
AcceptsReturn="True"
AllowDrop="True"
PreviewDragEnter="DropText_PreviewDragEnter"
HorizontalAlignment="Left" Height="20" Margin="360,70,0,0" TextWrapping="Wrap" Text=""
VerticalAlignment="Top" Width="70"/>
答案 0 :(得分:2)
关于#1,您正在引用类ListBox,而不是该类的实例。它类似于做类似的事情:
string =“a”。
你应该做的是在xaml中编写一个ListBox,在其中你将它的ItemSource属性绑定到视图模型的UserList属性中。
我建议你在互联网上找到一个绑定列表框以查看概念的例子。
关于#2,目前尚不清楚您要回收的错误是什么,但请确保您已在xaml后面的代码中实现了DropText_PreviewDragEnter方法。
答案 1 :(得分:1)
首先,您将ItemsSource设置在错误的位置 - 您需要在UserControl的xaml页面中设置ItemsSource。
<ListBox ItemsSource="{Binding _UsersList}"
至于第二个问题 - 你没有给我们足够的帮助。您是否有与该事件相关的事件背后的代码?