Tag: observablecollection

在XML文件中序列化和存储图像

有一点问题。 我有一个程序,可以构建一个可观察的用户集合。 用户有名字,姓氏和图像。 我可以将用户添加到observable集合中,但我也想保存集合并在每次重新打开程序时加载它。 我的问题是,虽然保存名字和姓氏相当容易,但编写者无法将图像写入xml文件。 有没有办法解决? 这是我到目前为止所拥有的: 可观察的集合: ObservableCollection ProfileList = new ObservableCollection(); 有问题的作家: XmlSerializer xs = new XmlSerializer(typeof(ObservableCollection)); using (StreamWriter wr = new StreamWriter(“vendors.xml”)) //Data/customers.xml { xs.Serialize(wr, ProfileList); } 有任何想法吗? 如果确实存在写入图像的解决方案,是否有可行的方法再次读出它?

将ObservableCollection绑定到wpf数据网格:网格保持为空

我想将ObservableCollection绑定到wpf datagrid。 我的ObservableCollection不是空的,但是,我的datagrid保持为空: public partial class Fenetre_EvtCode : Window { ObservableCollection glb_ObservableEvtCode; public Fenetre_EvtCode() { InitializeComponent(); EvtCode myEvt = new EvtCode(); glb_ObservableEvtCode = myEvt.GetAllEvtCode(); } } 这是我的xaml: 我再说一遍:我查看了调试,我的ObservableCollection不是空的。 有谁知道为什么ma datagrid保持空?

使用MVVM中的后台worker更新ObservableCollection

好的,我最近实现了一个后台工作程序来执行数据的保存和加载。 但是,让它在save命令上工作已经certificate是困难的。 基本上,我的save命令生成一个事件,该事件通知集合视图模型,已添加Item,并且该项应添加到其自己的ObservableCollection中。 此时,我得到通常的exception,说我不能在不同的线程上更新ICollection。 我已经尝试创建一个调用Dispatcher.Invoke的新列表类型,但是这仍然会生成相同的exception。 我想知道是否有其他人对如何最好地解决这个问题有任何建议? 所以目前我有一个inheritance自ObservableCollection的类: public class ThreadSafeObservableCollection : ObservableCollection { public ThreadSafeObservableCollection(List collection) : base(collection) { dispatcher = Dispatcher.CurrentDispatcher; rwLock = new ReaderWriterLock(); } protected override void InsertItem(int index, T item) { if (dispatcher.CheckAccess()) { if (index > this.Count) return; LockCookie c = rwLock.UpgradeToWriterLock(-1); base.InsertItem(index, item); rwLock.DowngradeFromWriterLock(ref c); } else { object[] […]

对ObservableCollection进行排序

假设我有员工类的ObservableCollection public ObservableCollection employeeCollection = new ObservableCollection(); public class Employee { public string FirstName { get; set; } public string LastName { get; set; } public double MobileNumber { get; set; } public string City { get; set; } public int Age { get; set; } public Employee() {} } 现在我试图通过用户从combobox中进行适当选择来对ObservableCollection (“employeeCollection”)进行排序[它将是…… .Sort By FirstName […]

ObservableCollection元素转换/投影包装器

在WPF中创建ViewModel时,有时需要将ObservableCollection (源集合)中可用的数据转换为扩展/限制/投影原始元素(目标集合)的包装元素集合,同时将数据和顺序转换为元素始终镜像原始集合。 就像Select扩展方法一样,除了它不断更新,因此可以用于WPF绑定。 如果在索引x处将元素添加到源,则会在目标集合中的相同索引x处添加相同元素的Wrapper。 如果在源集合中删除了索引y处的元素,则会在目标集合中删除索引y处的元素。 假设有一个ObservableCollection ,但我需要绑定的是ReadOnlyObservableCollection (或等效的),其中ClassB – > ClassA如下: class ClassB : INotifyPropertyChanged, IDisposable { public ClassB(ClassA a) { Wrapped = a; (Wrapped as INotifyPropertyChanged).PropertyChanged+=WrappedChanged; } public ClassA Wrapped { get; private set; } public int SomeOtherProperty { get { return SomeFunction(Wrapped); } WrappedChanged(object s, NotifyPropertyChangedArgs a) { … } … } 我可以编写自己的TemplatedTransformCollectionWrapper […]

长列表选择器可观察集合和可视树 – 问题?

我做了一个简短的例子来说明我遇到了一些问题。 他们将LongsListSelector绑定到ObservableCollection(不管是什么类型的项目)。 我将长列表项模板设置为(例如)一个文本块,我还制作了三个按钮 – 将一个元素添加到集合中,删除最后一个元素,以及搜索visuall树。 代码不是很长,所以我将在下面发布它(如果你想要整个例子,请访问: http : //sdrv.ms/163TYEG )。 XAML(标题除外): 和C#: public partial class MainPage : PhoneApplicationPage { private ObservableCollection collection = new ObservableCollection(); public MainPage() { InitializeComponent(); phoneLLS.ItemsSource = collection; addBtn.Click += addBtn_Click; delBtn.Click += delBtn_Click; showBtn.Click += showBtn_Click; } private void addBtn_Click(object sender, RoutedEventArgs e) { collection.Add(“element”); } private void delBtn_Click(object sender, […]

ObservableCollection未更新View

我刚开始使用MVVM并遇到了障碍,我希望有人可以帮助我。 我正在尝试使用2个列表框创建一个简单的视图。 第一个列表框中的选择将填充第二个列表框。 我创建了一个类,用于存储我想要绑定的信息。 MyObject类(Observable Object只是一个实现INotifyPopertyChanged的基类) public class MyObject : ObservableObject { String _name = String.Empty; ObservableCollection _subcategories; public ObservableCollection SubCategories { get { return _subcategories; } set { _subcategories = value; RaisePropertyChanged(“SubCategories”); } } public String Name { get { return _name; } set { _name = value; RaisePropertyChanged(“Name”); } } public MyObject() { […]

如何更新ObservableCollection的现有元素?

我有一个ObservableCollection实例绑定到WPF列表框,其中包含两个独立的数据模板(一个用于显示,一个用于编辑)。 用于编辑的数据模板在文本框上具有单向绑定,并具有“保存”按钮。 我需要做哪些更改才能按下“保存”按钮(将列表项置于编辑模式后),值I更改文本框以替换ObservableCollection(和显示)中的值?

过滤ObservableCollection?

当我将ListBox直接绑定到ObservableCollection时,我得到了我的ListBox中显示的实时更新,但是只要我在混合中添加其他LINQ方法,我的ListBox就不再被告知对ObservableCollection的任何更改。 在这里,让我举一个例子来说明; public partial class MainPage : PhoneApplicationPage { ObservableCollection Words = new ObservableCollection(); public MainPage() { InitializeComponent(); listBox1.ItemsSource = Words; } private void AddButton_Click(object sender, RoutedEventArgs e) { Words.Add(DateTime.Now.ToString()); } } 在这里,我向一个简单的页面添加了一个Button和一个ListBox,然后单击该按钮使新项目立即出现在ListBox中。 但是,如果我改变了 listBox1.ItemsSource = Words; 至 listBox1.ItemsSource = Words.Where(w => w.Contains(“:”)); ListBox不再更新。 如何在我的ObservableCollection和ListBox之间添加“filter”,并且仍然可以在不必再次设置.ItemsSource的情况下进行更新?

在我的ViewModel中使用Dispatcher是错误的吗?

我正在转换一个聊天解析器,用于我在c#winforms中编写的游戏到wpf,主要是为了更好地处理MVVM和wpf。 这是我如何设置项目的故事 查看 :现在它只是一个简单的ListBox,ItemSource绑定到我的viewmodels可观察聊天集合 型号 :我有多个可以一次登录的角色,每个角色都有一个聊天类。 聊天课开始一个后台工作人员从游戏中抓取和下一行聊天,然后使用此行触发一个名为IncomingChat的事件。 public event Action IncomingChat; 我正在使用后台工作人员在我的backgroundworkers progresschaged事件中触发事件,因为当我使用计时器时,我一直遇到线程问题。 起初我通过将我的Timer更改为DispatchTimer来纠正这个问题,但这对我来说在我的模型中有一个DispatchTimer似乎不对。 ViewModel :由于我有多个字符,我正在创建多个ChatViewModel。 我将一个字符传递给ChatViewModels构造函数并订阅Chat事件。 我创建了一个ObservableColleciton来在收到此事件时保留我的聊天行。 现在,当我尝试将我从聊天事件中收到的行添加到我的observablecollection时,我在viewModel上收到了一个线程问题。 我通过使我的viewmodels传入聊天事件处理程序看起来像这样来解决这个问题 public ObservableCollection<Game.ChatLine) Chat {get; private set;} void Chat_Incoming(Game.ChatLine line) { App.Current.Dispatcher.Invoke(new Action(delegate { Chat.Add(line) }), null); } 但这对我来说并不合适。 虽然它有效,但在我的viewmodel中使用Dispatcher对我来说似乎不合适。