Tag: wpf

在我的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对我来说似乎不合适。

WPF MVVM:如何将GridViewColumn绑定到ViewModel-Collection?

在我的View中,我在ViewModel中有一个绑定到CollectionView的ListView,例如: 现在这些GridViewColumns是固定的,但我希望能够从ViewModel更改它们。 我想我必须将GridViewColumn集合绑定到ViewModel中的某些东西,但是什么,以及如何? ViewModel对WPF一无所知,所以我不知道如何在MVVM中实现这一点。 这有什么帮助吗?

提高WPF DataGrid的性能

在我的.NET 3.5 WPF应用程序中,我有一个WPF DataGrid ,它将填充500列和50行。 在滚动时,或者当我执行DataGrid.Items.Refresh()或选择行时,App的性能非常差。 实际应用程序将花费大约20秒来更新布局。 Layout_Updated()事件将在20秒后触发。 如果我将列减少到50或更少,App会非常敏感。 根据我的发现,性能与列数直接相关。 如何提高DataGrid性能?

调用线程无法访问此对象,因为另一个线程拥有它.WPF

每当我刷新标签时,我都会收到此错误: 调用线程无法访问此对象,因为另一个线程拥有它。 我试图调用,但它失败了。 我正在使用WPF表格。 delegate void lostfocs(string st); private void imgPayment_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Thread t = new Thread(modi); t.Start(); } void modi() { try { label1.Content = “df”; } catch { lostfocs ld = new lostfocs(up); // ld.Invoke(“df”); object obj=new object(); ld.Invoke(“sdaf”); } } void up(string st) { label1.Content = st; }

WPF Datagrid获取选定的单元格值

我想在datagrid中获取所选单元格的值,请任何人告诉如何执行此操作。 我使用了SelectedCell改变了事件,我怎么能这样做? dataGrid1.CurrentCell

ItemPropertyChanged无法处理observableCollection.Why?

我已经搜索了高低的解决方案,但我似乎没有找到它的底部。 像网上的很多post我似乎没有让我的itemPropertyChanged工作。 编辑集合中的项目时不会触发。为什么。 有点长,但这是我放在一起的一个例子。 我有一个customerViewModel,它包含一个OrderViewModel集合,当编辑datagrid中的事件不会触发时。 我已经实现了以下function,但只在加载时才会被解雇。 好像它不是同一个东西的集合…… INotifyPropertyChanged inpc = OrderViewModels; inpc.PropertyChanged += OnItemPropertyChanged; 有什么建议吗?这让我很生气 楷模 public class Order { public int Id { get; set; } public string Description { get; set; } public int CustomerId{ get; set; } } public class Customer { public Customer() { Orders=new ObservableCollection(); } public int Id { […]

触发OnPropertyChanged的更好方法

我们有一个遵循MVVM模式的WPF项目。 在View Model中有很多代码如下所示: private string m_Fieldname; public string Fieldname { get { return m_Fieldname; } set { m_Fieldname = value; OnPropertyChanged(“Fieldname”); } } 有没有办法做到这需要更少的代码? 对这样的事情会很好: [NotifyWhenChanged] public string Fieldname { get; set ; }

WPF:如何使用MVVM将命令绑定到ListBoxItem?

我刚开始学习MVVM。 我通过遵循这个MVVM教程从头开始制作应用程序(我强烈推荐给所有MVVM初学者)。 基本上,我到目前为止创建的是一些用户添加他或她的数据的文本框,一个保存该数据的按钮,随后用所有条目填充ListBox。 这就是我遇到的问题:我希望能够双击ListBoxItem并触发我创建并添加到ViewModel的命令。 我不知道如何完成XAML方面,即我不知道如何将该命令绑定到ListBox(Item)。 这是XAML: … … 这是ViewModel: public class MainWindowViewModel : DependencyObject { … public IEntriesProvider Entries { get { return entries; } } private IEntriesProvider entries; public OpenEntryCommand OpenEntryCmd { get; set; } public MainWindowViewModel(IEntriesProvider source) { this.entries = source; … this.OpenEntryCmd = new OpenEntryCommand(this); } … } 最后,这是我想在用户双击EntriesListBox中的项目后执行的OpenEntryCommand: public class OpenEntryCommand […]

从程序集加载ResourceDictionary

我在文件系统的某个地方有一个程序集,例如“C:\ temp \ test.dll”。 在那个程序集中有一个ResourceDictionary,例如“abc.xaml”。 我如何获得ResourceDictionary? 也许有一种方法使用Reflections? 到目前为止我没有找到解决方案。 提前致谢! 编辑:只想添加我想要访问字典中的资源,例如样式。

如何将数据集中的表绑定到C#和XAML中的WPF数据网格

我一直在寻找一些非常简单的东西:将WPF数据网格绑定到数据表,以便在设计时查看列。 我无法让任何一个例子为我工作。 以下是在数据集信息中填充数据表InfoWork的C#代码: info = new Info(); InfoTableAdapters.InfoWorkTableAdapter adapter = new InfoTableAdapters.InfoWorkTableAdapter(); adapter.Fill(info.InfoWork); 问题是无论我如何声明’info’或’infoWork’Visual Studio / XAML都找不到它。 我试过了: 我也从wpf.codeplex尝试过这个例子,但是XAML甚至不喜欢“local:”关键字! 这里有两个主要问题:1)如何在C#中声明表InfoWork以便XAML可以看到它? 我尝试在XAML存在的窗口类中将其声明为Public,但没有成功。 2)如何在XAML中声明windows资源,特别是数据集中的数据表? 出于好奇,有没有理由说ItemsSource不会显示为在属性设计窗口中设置的属性?