Tag: mvvm

该组件没有uri标识的资源

我想创build一个通用DataGrid在我所有的视图/用户控件上使用。 这是我的结构: 名为"Core" Class Library : 称为"ViewBase" : public class ViewBase : UserControl { public ViewBase() { } //Rest of Methods and Properties } 称为"Controls" Class Library : UserControl被称为"GridView" : XAML: <vb:ViewBase x:Class="Controls.GridView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vb="clr-namespace:Core;assembly=Core"> <Grid> <DataGrid></DataGrid> </Grid> </vb:ViewBase> 代码背后: using Core; public partial class GridView : ViewBase { public GridView () { […]

如何自动缩放一组控件的字体大小?

我有一个WPF中的几个TextBlocks在一个网格,我想缩放取决于其可用的宽度/高度。 当我search自动缩放字体大小时,典型的build议是将TextBlock放入ViewBox。 所以我这样做了: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Viewbox MaxHeight="18" Grid.Column="0" Stretch="Uniform" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <TextBlock Text="{Binding Text1}" /> </Viewbox> <Viewbox MaxHeight="18" Grid.Column="1" Stretch="Uniform" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <TextBlock Text="{Binding Text2}" /> </Viewbox> <Viewbox MaxHeight="18" Grid.Column="2" Stretch="Uniform" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <TextBlock Text="{Binding Text3}" /> </Viewbox> </Grid> 它会自动缩放每个TextBlock的字体。 然而,这看起来很有趣,因为如果其中一个TextBlocks有更长的文本,那么它将是一个较小的字体,而相邻的网格元素将是一个更大的字体。 我希望字体大小按组缩放,如果我可以指定一个“SharedSizeGroup”作为一组控件来自动调整字体大小,那么可能会很好。 […]

WPF没有XAML

在架构上,我认为WPF是相当惊人的。 一般来说,我是底层渲染/animation内部工作的忠实粉丝。 模板和样式的灵活性设置是相当令人印象深刻的。 但我讨厌XAML–我觉得这使许多事情变得复杂。 我已经用它在大型和小型应用程序,我发现自己多次试图找出如何在XAML中做的一些基本原则是基本的,但语法是古怪的。 不仅如此,我还多次想知道parsing/绑定的某些部分有多沉重。 (我知道它是编译的,但是我不确定在运行时仍然有多less评估) XAML只是构build和加载可视化树的一种方式。 是否有任何框架可以简化以非XML,基于代码的方式构build可视化树? 具体而言,我对框架感兴趣,可以在保留MVVM方法的同时缓解以下任何问题: 强有力的绑定。 指定ViewModel必须符合特定的types。 我假设BaseBinding在底层使用了reflection,我对这个速度有些怀疑,更不用说破坏性的绑定令人讨厌了。 更快的绑定,非INotifyPropertyChanged绑定。 看起来像某种BindableProperty<T>可以被创build,绑定可以直接监听,而不是接收所有的ViewModel属性更改。 直接callback与string参数的使用似乎也是有利的。 一种不同的资源pipe理方法; 再次,强types的某种字典可能是相当不错的。 我几乎喜欢将样式看作lambda或什么来捕获强types的方面。 总而言之,任何非基于XAML的框架都适合MVVM,而且是强types的?

“你确定吗?”提示。 ViewModel的一部分还是纯粹的视图?

我一直在玩弄“你确定吗? 在我的MVVM WPF应用程序中键入提示。 我倾向于认为这些纯粹是观点的一部分。 如果ViewModel暴露了一个DeleteCommand ,那么我希望这个命令立即删除。 要将这样的提示集成到ViewModel中,必须公开一个单独的RequestDeleteCommand ,一个用于绑定提示的DeletePromptItem属性,还可以将其作为触发器来显示提示。 即使这样,也没有任何东西停止直接调用DeleteCommand的unit testing,除非在ViewModel中放置特定的逻辑来要求DeletePromptItem将作为参数提供的项目与DeleteCommand相匹配。 但是,这一切似乎像ViewModel对我来说是噪音。 提示是更多的用户界面问题,以防止错误等。对我来说,这表明它应该在视图中确认提示调用DeleteCommand。 有什么想法吗?

iOS中的MVVM示例/示例实现

HAs任何人在iOS应用程序中实现MVVM模式,而不使用ReactiveCocoa? 在这里发现了很多的例子,但他们都使用反应cocoa。 我想要一个MVVM实现的简单例子。

ReactiveUI生产准备好了吗?

我一直在研究在生产代码中使用Reactive UI的可行性。 其中一些function非常吸引人,但是我担心依赖这个库。 这些包括: 怪异的命名和惯例。 例如,以小写开头的受保护成员和RaiseAndSetIfChanged方法取决于以私人成员开头的下划线。 我理解Paul Betts(ReactiveUI作者)有一个Ruby背景,所以我想这就是奇怪的命名所在。 然而,这对我来说是一个真正的问题,因为在我的项目中标准命名(按照Stylecop)是强制执行的。 即使没有执行,我也会担心由此导致的命名不一致。 缺乏文件/样品。 有一些文件和一个孤独的样本。 但是,文档只是一系列(旧)博客post,而示例则基于图书馆的V2(现在位于V4)。 奇怪的devise,部分。 例如,日志是抽象的,以便不依赖于特定的日志框架。 很公平。 但是,因为我使用log4net(而不是NLog),我将需要我自己的适配器。 我认为这将需要我实现IRxUIFullLogger ,其中有一个方法的指标(超过50)。 我会认为一个更好的方法是定义一个非常简单的接口,然后在ReactiveUI中提供扩展方法来促进所有必要的重载。 另外,还有这个奇怪的IWantsToRegisterStuff接口是NLog程序集依赖的,我不能依赖它(因为它是一个内部接口)。 我希望我不需要那个… 无论如何,我关心的是图书馆的整体devise。 有没有人被这个咬伤? 我已经广泛使用MVVM Light。 我知道保罗做了一个博客文章,他解释说,你可以在技术上同时使用这两个,但我更关心的是可维护性。 我怀疑这两个混合在一起的代码基础是非常混乱的。 有没有人有在生产中使用Reactive UI的实践经验? 如果是这样,你能消除或解决我的任何上述问题?

使用什么? MVC,MVP或MVVM还是…?

我将开始一个Java项目来开发一个桌面应用程序。 什么用作表示层模式(MVC,MVP,MVVM或….)? …如果可能的话,用一些小小的例子… 🙂

WPF中MVVM的一句话解释?

我听说它是​​构buildWPF UI的下一个最好的例子,但是所有现有的例子都有几十行代码 – 我可以得到一个MVVM的Hello World,它毫不含糊地解释了它的一切吗? 我对C#/ .net也是一个新手,所以也许可以指点一些可以帮助的资源? 非常感激!

WPF:如何从ViewModel发送一个事件信号到代码隐藏没有代码视图?

我有相当简单的(我希望:))问题: 在MVVM中,View通常监听ViewModel属性的变化。 不过,我有时候喜欢听事件,例如,View可以在VM信号时开始animation,或者closures窗口。 通过使用NotifyPropertyChanged的bool属性来做到这一点(只有当它从false更改为true时才开始animation)是可能的,但感觉像是一个黑客攻击,我更喜欢暴露事件,因为它在语义上是正确的。 此外,我想这样做没有代码在代码隐藏,因为做viewModel.myEvent += handler将意味着我会手动取消注册该事件,以便允许查看GC'D – WPF视图已经能听'属性'弱',我更喜欢编程只声明在视图。 标准的强大的事件订阅也是不好的,因为我需要切换多个视图模型为一个视图(因为每次创build视图需要太多的CPU时间)。 谢谢你的想法(如果有一个标准的解决scheme,一个链接到MSDN就足够了)!

确保在MVVM WPF应用程序中的UI线程上调用OnPropertyChanged()

在我正在使用MVVM模式编写的WPF应用程序中,我有一个后台进程来完成这件事,但是需要从UI中获取状态更新。 我正在使用MVVM模式,所以我的ViewModel几乎不知道向用户展示模型的视图(UI)。 说我有我的ViewModel中的以下方法: public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e) { this.Messages.Add(e.Message); OnPropertyChanged("Messages"); } 在我看来,我有一个ListBox绑定到ViewModel的Messages属性( List<string> )。 OnPropertyChanged通过调用PropertyChangedEventHandler来实现INotifyPropertyChanged接口的angular色。 我需要确保在UI线程上调用OnPropertyChanged – 我该怎么做? 我已经尝试了以下内容: public Dispatcher Dispatcher { get; set; } public MyViewModel() { this.Dispatcher = Dispatcher.CurrentDispatcher; } 然后将以下内容添加到OnPropertyChanged方法: if (this.Dispatcher != Dispatcher.CurrentDispatcher) { this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate { OnPropertyChanged(propertyName); })); return; } 但是这不起作用。 有任何想法吗?