- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面是一个最小的例子,我不可能再减少它了。
我在 ViewModel 中创建一个实时过滤的 CollectionView,如下所示:
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Windows.Data;
using System.Windows;
namespace AntiBonto.ViewModel
{
[Serializable]
public class Person
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public string Name { get; set; }
public override string ToString()
{
return Name;
}
private int num;
public int Num
{
get { return num; }
set { num = value; RaisePropertyChanged(); }
}
}
class ObservableCollection2<T> : ObservableCollection<T>
{
public ObservableCollection2() : base() { }
public ObservableCollection2(T[] t) : base(t) { }
public void AddRange(IEnumerable<T> collection)
{
foreach (var i in collection)
{
Items.Add(i);
}
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
}
class MainWindow: ViewModelBase
{
public MainWindow() { }
private ObservableCollection2<Person> people = new ObservableCollection2<Person>();
public ObservableCollection2<Person> People
{
get
{
return people;
}
set
{
people = value;
RaisePropertyChanged();
}
}
public ICollectionView Team
{
get
{
CollectionViewSource cvs = new CollectionViewSource { Source = People, IsLiveFilteringRequested = true, LiveFilteringProperties = { "Num" } };
cvs.View.Filter = p => ((Person)p).Num != 11;
return cvs.View;
}
}
public ICollectionView Ujoncok
{
get
{
CollectionViewSource cvs = new CollectionViewSource { Source = People, IsLiveFilteringRequested = true, LiveFilteringProperties = { "Num" } };
cvs.View.Filter = p => ((Person)p).Num == 11;
return cvs.View;
}
}
}
}
GUI 有一个按钮可以修改 People 集合中的 Person 对象:
<Window x:Class="AntiBonto.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:AntiBonto.ViewModel"
mc:Ignorable="d"
Title="AntiBonto" Width="1024" Height="768">
<Window.DataContext>
<vm:MainWindow/>
</Window.DataContext>
<Window.Resources>
<FrameworkElement x:Key="DataContextProxy" DataContext="{Binding}"/> <!-- workaround, see http://stackoverflow.com/questions/7660967 -->
</Window.Resources>
<TabControl>
<TabItem Header="Tab2">
<StackPanel>
<Button Content="Does" Click="Button_Click"/>
<ContentControl Visibility="Collapsed" Content="{StaticResource DataContextProxy}"/>
<!-- workaround part 2 -->
<DataGrid ItemsSource="{Binding Ujoncok}" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Who" ItemsSource="{Binding DataContext.Team, Source={StaticResource DataContextProxy}, Mode=OneWay}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</TabItem>
</TabControl>
</Window>
我像这样从 XML 文件加载数据:
using System;
using System.IO;
using System.Linq;
using System.Windows;
using System.Xml.Serialization;
namespace AntiBonto
{
[Serializable]
public class AppData
{
public Person[] Persons;
}
public partial class MainWindow : System.Windows.Window
{
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
private string filepath = "state.xml";
private AppData AppData
{
get { return new AppData { Persons = viewModel.People.ToArray()}; }
set { viewModel.People.AddRange(value.Persons);}
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var xs = new XmlSerializer(typeof(AppData));
if (File.Exists(filepath))
{
using (var file = new StreamReader(filepath))
{
AppData = (AppData)xs.Deserialize(file);
}
}
}
private ViewModel.MainWindow viewModel { get { return (ViewModel.MainWindow)DataContext; } }
private void Button_Click(object sender, RoutedEventArgs e)
{
Person p = viewModel.People.First(q => q.Name == "Ferencz Katalin");
if (p.Num == 11)
p.Num = 0;
else
p.Num= 11;
}
}
}
XML 文件是这样的:
<?xml version="1.0" encoding="utf-8"?>
<AppData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Persons>
<Person>
<Name>Person1</Name>
<Num>0</Num>
</Person>
<Person>
<Name>Person2</Name>
<Num>0</Num>
</Person>
</Persons>
</AppData>
当我点击按钮一次或两次时,我得到了一个NullReference
异常。没有内在的异常(exception)。异常不是出现在我的代码中,而是出现在框架代码中,所以它没有显示来源,我无法找出哪个对象为空以及异常来自哪里。我没有设法设置“进入 .NET 源代码”,它仍然告诉我没有可用的源代码。
这是堆栈跟踪:
at System.Windows.Data.ListCollectionView.RestoreLiveShaping() at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) at System.Windows.Application.RunDispatcher(Object ignore) at System.Windows.Application.RunInternal(Window window) at System.Windows.Application.Run(Window window) at System.Windows.Application.Run() at AntiBonto.App.Main() in D:\Marci\Programozás\AntiBonto\AntiBonto\obj\Debug\App.g.cs:line 0 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()
最佳答案
我不知道为什么,但这修复了错误:
public ICollectionView Team
{
get
{
CollectionViewSource cvs = new CollectionViewSource { Source = People, IsLiveFilteringRequested = true, LiveFilteringProperties = { "Num" } };
cvs.View.Filter = p => ((Person)p).Num != 11;
cvs.View.CollectionChanged += EmptyEventHandler;
return cvs.View;
}
}
private void EmptyEventHandler(object sender, NotifyCollectionChangedEventArgs e) { }
我试图调试异常发生的地方,我想在集合发生变化时设置一个断点。订阅事件使异常消失。
关于c# - PresentationFramework 中的 NullReference 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37394151/
是否有其他替代方法使用 AutoMapper Queryable 扩展来避免尝试从子对象映射时出现空引用异常? 背景 使用 AutoMapper Queryable 扩展投影到 CustomerVie
我正在尝试为 ServiceStack 使用新的 API 方法,并且正在构建一个测试控制台应用程序来托管它。到目前为止,我有实例化请求 DTO 的路由,但是在请求到达我的服务的 Any 方法之前,我得
我在使用 Rhino Mocks 进行部分模拟时遇到问题: var authentication = (FormsAuthenticationService)_mocks.PartialMock(
我在 Xamarin 上有一个应用程序,它工作正常,如果我按下后退按钮,移动到它隐藏在应用程序堆栈中的主菜单,所以当我从应用程序堆栈中打开它时,它突然因 NullReference 而崩溃 06-10
通常它工作正常但在某些情况下(我无法重现它)我收到带有堆栈跟踪的 NullReferenceException: at Npgsql.NpgsqlCommand.ClearPoolAndCrea
下面是一个最小的例子,我不可能再减少它了。 我在 ViewModel 中创建一个实时过滤的 CollectionView,如下所示: using System.Collections.Generic;
我有以下示例模式: public class CounterReading { public int CounterReadingId { get; set; } public vir
我尝试在 UWP 项目中打开 XAML 文件后立即抛出此异常 System.NullReferenceException Object reference not set to an instance
这是我写的: if ((lstProperty[i].PropertyIdentifier as string).CompareTo("Name") == 0) Resharper 给我一个错误(我是
我在我的 mvc3 项目中首先使用 EF 4.2 代码。 miniprofiler 工作正常(sql + mvc),但我遇到了异步任务的问题。 我这样执行它们(这个方法可以吗?我对这个 new Dat
我正在尝试处理 NullReference 异常,但我对如何处理它感到困惑。这是我的示例代码,其中引发了 NullReference 异常: private Customer GetCustomer
我们有一个 WCF 服务和大致如下的客户端代码: bool success = false; IClientChannel proxy = null; try { var client = cha
我正在开发 Windows Phone 7.1 应用程序,这是应用程序栏: 当我引用它的元素时,命名为“e
这个问题在这里已经有了答案: Can Visual Studio tell me which reference threw a NullReferenceException? (8 个答案) De
当我关闭最后一个窗口时,我的应用程序中出现未处理的异常: An unhandled exception of type 'System.NullReferenceException' occurred
我是wpf的新手;我正在使用可编辑的组合框(用于搜索目的)。 当 ComboBox 中的文本发生变化时,搜索结果显示在数据网格下方。选择数据网格中的任何行时,其值将显示在文本框中以供编辑。 当我在组合
我们目前正在使用 Windows 服务生成 PDF 文件。我最近在优化代码并注意到内存的滥用。这是由于 var reportViewer = new ReportViewer() 周围缺少 using
我在应用程序中使用 OrmLite 进行数据访问。在 4 个环境中的 3 个环境中,一切都按预期工作。 所有环境都运行 .net 4.5。数据库运行不同的版本。故障环境连接到sql server 10
我不断在 su.Companies.Add(co) 上收到 NullReferenceException;线。我认为按照我的模型定义方式它应该可以工作。自动完成,听起来像一个新手,完成这个就好了。我显
在一个循环中,我试图添加一个类型为 Location 的对象到 List属性(property)。 Controller : [HttpPost] public ActionResult Inde
我是一名优秀的程序员,十分优秀!