我正在使用以下代码,该代码按预期在主窗口上运行。
public partial class MainWindow : Window
{
public ObservableCollection<User> _UsersList = new ObservableCollection<User>();
private readonly Dictionary<string, string> _mapping = new Dictionary<string, string>();
public MainWindow()
{
InitializeComponent();
_UsersList.Add(new User { Name = "Darl" });
CollectionViewSource source = this.Resources["source"] as CollectionViewSource;
source.Source = _UsersList;
ListBox.SelectionChanged += listbox_SelectionChanged;
现在我想更改它并在用户控件中使用代码,我按以下步骤操作
公共部分类UC:UserControl {
private static ModelView ModelViewInstance;
public Uc()
{
InitializeComponent();
ModelViewInstance = new MappingViewModelView();
DataContext = ModelViewInstance;
CollectionViewSource source = this.Resources["source"] as CollectionViewSource;
source.Source = ModelViewInstance.UserList;
当我运行此程序时,我在source.Source = ModelViewInstance.UserList;
我需要这段代码,因为当我省略它并运行程序时,我没有例外但是
此代码为用户对象返回null,如果我使用主窗口程序而不是用户控件则不会发生
private void DropText_PreviewDrop(object sender, DragEventArgs e)
{
var textbox = (TextBox) sender;
if (!(textbox.Text.Length > 0))
{
DataObject data = e.Data as DataObject;
User user = data.GetData(typeof(User)) as User;
textbox.Tag = user;
我有另一个类,如模型视图,用户定义为观察者集合,
如何避免此转储?
答案 0 :(得分:0)
如果您最初在source CollectionViewSource
部分宣布了Window.Resources
,但未将Resources
从Window
移至UserControl
,则您的问题很可能是由对null
的{{1}}引用引起的。如果是这种情况,请尝试将source CollectionViewSource
移至source CollectionViewSource
部分并再次运行您的应用程序。
更新&gt;&gt;&gt;
如果您的UserControl.Resources
ListBox
位于ListBox
,则无法通过UserControl
与您联系。相反,您需要将MainWindow
代码移到后面的listbox_SelectionChanged
代码中。但实际上,你仍然做错了。您应该在UserControl
中创建DependencyProperty
以将集合绑定到; UserControl
显示内容,但您仍可以从UserControl
添加或删除集合中的项目,因为这是集合所在的位置。