Tag: wpf

如何从其他视图模型调用主视图模型中的函数?

我的程序由一个TreeView和两个位于地面的contentPresenters组成。 mainWindow, TreeView和每个contentPresenter都有自己的viewModels。 我想从TreeViewViewModel的mainWindowViewModel调用一个函数。 我需要这样做,因为mainWindowViewModel控制contentPresenters显示的内容,我想手动更新显示。 我猜我会做这样的事情… TreeViewViewModel : public class TreeViewViewModel { //Do I need to declare the MainWindowVM? public TreeViewViewModel() { … } private void function() { //Command that affects display //Manually call function in MainWindowVM to refresh View } } 我试图从TreeViewViewModel访问MainWindowVM ,使用: public MainWindowViewModel ViewModel { get { return DataContext as MainWindowViewModel; } […]

为什么WPF支持绑定到一个对象的属性,但不是字段?

我有一个WCF服务,通过像这样的结构传递状态更新: [DataContract] public struct StatusInfo { [DataMember] public int Total; [DataMember] public string Authority; } … public StatusInfo GetStatus() { … } 我在ViewModel中公开一个属性,像这样: public class ServiceViewModel : ViewModel { public StatusInfo CurrentStatus { get{ return _currentStatus; } set { _currentStatus = value; OnPropertyChanged( () => CurrentStatus ); } } } 和XAML一样: <TextBox Text="{Binding CurrentStatus.Total}" /> […]

如何将CollectionContainer绑定到视图模型中的集合?

我有一个属性的视图模型,公开了一些东西。 我有一个ComboBox的ItemsSource属性绑定到这个集合。 现在用户可以从列表中select。 我想让用户清除select,所以我想添加一个项目(即空)到combobox。 这非常简单。 我决定尝试为ItemsSource使用CompositeCollection,以便将现有列表中的项目添加到combobox以及额外的Null项目。 经过这一段时间,我决定返回到CompositeCollection类的文档。 我复制他们的例子,并修改它使用视图模型,而不是静态资源。 当我将CollectionContainer绑定到ViewModel公开的列表时,我发现列表中没有任何项目出现在列表中。 我不知道如何解决这个问题,我正在寻找关于这个主题的任何build议。 这是我的XAML代码: <Window Background="CornflowerBlue" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c="clr-namespace:TryingWPF" x:Class="CompositeCollections" Title="CompositeCollections" SizeToContent="WidthAndHeight"> <Window.Resources> <c:CompositeCollectionVM x:Key="CompositeCollectionVM"/> <XmlDataProvider x:Key="GreekHeroesData" XPath="GreekHeroes/Hero"> <x:XData> <GreekHeroes xmlns=""> <Hero Name="Jason" /> <Hero Name="Hercules" /> <Hero Name="Bellerophon" /> <Hero Name="Theseus" /> <Hero Name="Odysseus" /> <Hero Name="Perseus" /> </GreekHeroes> </x:XData> </XmlDataProvider> <DataTemplate DataType="{x:Type c:GreekGod}"> <TextBlock Text="{Binding Path=Name}" […]

在WPF中,如何确定控件是否对用户可见?

我正在展示一个很大的树,里面有很多物品。 这些项目中的每一个通过与其相关的UserControl控件向用户显示信息,并且该信息必须每250毫秒更新一次,这可能是非常昂贵的任务,因为我也使用reflection来访问它们的一些值。 我的第一个方法是使用IsVisible属性,但它不工作,如我所料。 有什么方法可以确定控件是否对用户“可见”? 注意:我已经使用IsExpanded属性来跳过更新折叠的节点,但是有些节点有100多个元素,无法find跳过网格视口之外的节点的方法。

将一个枚举属性数据绑定到WPF中的combobox

以下面的代码为例: public enum ExampleEnum { FooBar, BarFoo } public class ExampleClass : INotifyPropertyChanged { private ExampleEnum example; public ExampleEnum ExampleProperty { get { return example; } { /* set and notify */; } } } 我想要一个数据绑定属性ExampleProperty到一个combobox,以便它显示选项“FooBar”和“BarFoo”,并在模式TwoWay中工作。 最好我想我的ComboBox定义看起来像这样: <ComboBox ItemsSource="What goes here?" SelectedItem="{Binding Path=ExampleProperty}" /> 目前我有我的窗口中安装的ComboBox.SelectionChanged和ExampleClass.PropertyChanged事件的处理程序,我手动进行绑定。 有没有更好的或某种规范的方式? 你会经常使用转换器,你将如何填充正确的值combobox? 我甚至不想立即开始使用i18n。 编辑 所以有一个问题的答案是:我如何使用正确的值填充combobox。 通过来自静态Enum.GetValues方法的ObjectDataProvider检索Enum值作为string列表: <Window.Resources> <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type […]

如何转换字节数组中的图像

任何人都可以build议如何可以将图像转换为字节数组,反之亦然。 如果有人有一些代码样本帮助我。 我正在开发一个WPF应用程序,并启用findstream阅读器。

StaticResource和WPF中的DynamicResource有什么区别?

在WPF中使用资源(如画笔,模板和样式)时,可以将它们指定为StaticResources <Rectangle Fill="{StaticResource MyBrush}" /> 或者作为一个DynamicResource <ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}" /> 大多数时候(总是?),只有一个工作,另一个会在运行时抛出exception。 但是我想知道为什么: 主要区别是什么? 像内存或性能影响 WPF中有像“画笔总是静态”和“模板总是dynamic的”等规则吗? 我认为静态与dynamic之间的select并不像看起来那么武断……但我看不到这种模式。

是否有可能在WPF资源字典后面设置代码以进行事件处理?

是否有可能在WPF资源字典背后设置代码。 例如,在一个用户控件的button中,用XAML声明它。 button点击的事件处理代码在控件后面的代码文件中完成。 如果我要创build一个带有button的数据模板,我该如何编写事件处理程序代码,以便在资源字典中单击button。

将只读GUI属性返回到ViewModel

我想写一个ViewModel总是知道从视图的一些只读依赖项属性的当前状态。 具体来说,我的GUI包含一个FlowDocumentPageViewer,它从FlowDocument一次显示一个页面。 FlowDocumentPageViewer公开了两个名为CanGoToPreviousPage和CanGoToNextPage的只读依赖项属性。 我希望我的ViewModel始终知道这两个View属性的值。 我想我可以用OneWayToSource数据绑定来做到这一点: <FlowDocumentPageViewer CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" …> 如果允许的话,这将是完美的:每当FlowDocumentPageViewer的CanGoToNextPage属性发生变化时,新的值将被下推到ViewModel的NextPageAvailable属性中,这正是我想要的。 不幸的是,这不能编译:我得到一个错误,说'CanGoToPreviousPage'属性是只读的,不能从标记设置。 显然,只读属性不支持任何types的数据绑定,甚至不支持对该属性只读的数据绑定。 我可以让我的ViewModel的属性为DependencyProperties,并使OneWay绑定到另一种方式,但我不是疯狂的关注分离违规(ViewModel将需要一个引用的视图,MVVM数据绑定应该避免)。 FlowDocumentPageViewer不公开一个CanGoToNextPageChanged事件,我不知道从DependencyProperty获得更改通知的任何好方法,但创build另一个DependencyProperty绑定它,这似乎在这里矫枉过正。 如何让我的ViewModel通知视图的只读属性的变化?

我如何得到一个animation的gif在WPF中工作?

我应该使用哪种控制types – Image , MediaElement等?