标签: mvvm-light

使用WPF/MVVM Light Toolkit处理窗口关闭事件

我想处理窗口中的"Closing"事件(当用户点击右上角的"X"按钮时),以便最终显示确认消息或/并取消关闭.

我知道如何在代码隐藏中执行此操作:订阅窗口的"Closing"事件,然后使用"CancelEventArgs.Cancel"属性.

但我正在使用MVVM,所以我不确定这是一个好方法.

我认为好的方法是将Closing事件绑定到ViewModel中的Command.

我试过了:

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Closing">
            <cmd:EventToCommand Command="{Binding CloseCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

在我的ViewModel中使用关联的RelayCommand但它不起作用(命令的代码未执行).

c# wpf mvvm mvvm-light

139
推荐指数
7
解决办法
18万
查看次数

什么是模板绑定与绑定?

我无法理解BorderThickness="{TemplateBinding BorderThickness}.这里的代码:

<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
    <Border Padding="{TemplateBinding Padding}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            SnapsToDevicePixels="True">
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </Border>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

另请解释其他类型的绑定.

wpf mvvm-light

111
推荐指数
4
解决办法
7万
查看次数

什么是ViewModelLocator,与DataTemplates相比有哪些优缺点?

有人可以快速总结一下ViewModelLocator是什么,它是如何工作的,以及与DataTemplates相比使用它的优缺点是什么?

我曾尝试在Google上查找信息,但似乎有许多不同的实现,并没有关于它是什么以及使用它的优点/缺点的严格列表.

wpf datatemplate mvvm mvvm-light viewmodellocator

109
推荐指数
3
解决办法
4万
查看次数

MVVM Light Toolkit示例

有谁知道使用MVVM Light Toolkit创建的opensource WPF应用程序?或者任何样品?

c# wpf toolkit mvvm mvvm-light

59
推荐指数
4
解决办法
4万
查看次数

如何使用MVVMLight SimpleIoc?

我正在修改我的软件,它有杂乱的Messenger.Default(...)位.

有没有任何备忘单知道MVVMLight SimpleIoc用法(不是一般的IoC描述)?

c# wpf inversion-of-control mvvm-light windows-store-apps

55
推荐指数
1
解决办法
4万
查看次数

如何使用MVVM Light Toolkit打开一个新窗口

我在我的WPF应用程序中使用MVVM Light工具包.我想知道从现有窗口打开新窗口的最佳方法是什么.我有这个MainViewModel,负责MainWindow我的申请.现在,MainView按下按钮,我想打开它上面的第二个窗口.我有RelayCommmand绑定到ButtonCommand.在RelayCommand方法中,我可以创建一个新的窗口对象,只需调用Show(),如下所示:

var view2 = new view2()
view2.Show()
Run Code Online (Sandbox Code Playgroud)

但我不认为ViewModel应该负责创建新view2对象.我已经阅读了这篇文章WPF MVVM从VIEW MODEL获取Parent,其中Bugnion建议将消息​​传递给view1from viewmodel1,然后view1应该创建新的view2.但是我不确定他将这条消息传递给他的意思是view1什么?如何view1处理消息?在它的代码背后或什么?

此致,Nabeel

wpf mvvm mvvm-light

46
推荐指数
1
解决办法
3万
查看次数

MVVM Light RelayCommand参数

我在使用GalaSoft MVVM Light框架将参数传递给relaycommand时遇到问题.我知道mvvm light的relay命令的实现不使用lambda参数,所以我做了一些研究,并找到了一种方法,人们通过做这样的事情来解决它:

public RelayCommand ProjMenuItem_Edit
{
    get
    {
        if (_projmenuItem_Edit == null)
        {
            //This should work....
            _projmenuItem_Edit = new RelayCommand(ProjEditNode);
        }
        return _projmenuItem_Edit;
    }
}

private void ProjEditNode(object newText)
{
    var str = newText as string;
    OrganLocationViewModel sel = 
        ProjectOrganLocationView.GetExtendedTreeView().GetTopNode();

    //Console.WriteLine(sel.OrganDisplayName);
    sel.OrganDisplayName = str;
}
Run Code Online (Sandbox Code Playgroud)

但是,我一直在_projmenuItem_Edit = new RelayCommand(ProjEditNode);说错误Argument 1: cannot convert from 'method group' to 'System.Action'

我错过了什么?

c# wpf relaycommand mvvm-light

45
推荐指数
1
解决办法
5万
查看次数

MVVM Light:如何取消注册Messenger

我喜欢MVVM Light的Messenger及其灵活性,但是当我忘记明确取消注册收件人时(在Silverlight 4中),我遇到了内存泄漏.

原因在这里解释,但我很好,因为我认为明确取消注册收件人是一个好习惯,而不是依赖于Messenger使用弱引用.问题是说起来容易做起来难.

  • ViewModel很简单:您通常可以完全控制它们的生命周期,并且可以Cleanup()在不再需要它们时使用它们.

  • 另一方面,视图更加棘手,因为它们是通过DataTemplates实例化和销毁的.对于前者 你可以把ItemsControlwith MyView和DataTemplate 想象成一个ObservableCollection<MyViewModel>.该MyView控件创建/绑定引擎收集的,你有没有什么好办法对他们手动调用清理().

我有一个解决方案,但想知道它是否是一个体面的模式或有更好的选择.我们的想法是从ViewModel发送一条特定的消息,告诉相关的View处理:

public class MyViewModel : ViewModelBase
{
    ...

    public override void Cleanup()
    {
        // unregisters its own messages, so that we risk no leak
        Messenger.Default.Unregister<...>(this);

        // sends a message telling that this ViewModel is being cleaned
        Messenger.Default.Send(new ViewModelDisposingMessage(this));

        base.Cleanup();
    }
}

public class MyView : UserControl, ICleanup
{
    public MyView()
    {
         // registers to messages it actually …
Run Code Online (Sandbox Code Playgroud)

c# silverlight mvvm silverlight-4.0 mvvm-light

42
推荐指数
2
解决办法
1万
查看次数

在PropertyChanged之后ICommand CanExecute不会触发?

我有一个WPF应用程序,它显示一个绑定到命令的按钮:

<Button Command="{Binding Path=TestrunStartCommand}" Content="GO!">
Run Code Online (Sandbox Code Playgroud)

该命令定义如下:

public ICommand TestrunStartCommand
{
    get { return new RelayCommand(TestrunStartExecute, () => !IsTestrunInProgress); }
}

public bool IsTestrunInProgress
{
    get{
        return _isTestrunInProgress;
    }
    set{
        _isTestrunInProgress = value;
        RaisePropertyChanged(IsTestrunInProgressPropertyName);
    }
}   
Run Code Online (Sandbox Code Playgroud)

问题是,我设置IsTestrunInProgress为false 后不会立即启用该按钮,但只有在我单击应用程序窗口后才会启用.

你能帮我理解这个行为并告诉我如何解决这个问题吗?

进一步阅读: wpf命令模式 - 何时查询canexecute

c# wpf mvvm-light

40
推荐指数
3
解决办法
3万
查看次数

MVVM Light + Unity还是Prism?

我现在在WPF中有点过时,并且有兴趣听到人们对最新版本的Prism(我之前使用过几个版本)和MVVM Light + Unity方法(我从未做过)的看法 - 体面的例子URL会很好).

我的项目将是一个很大的项目,包括由几个开发人员编写的多个模块 还有资金引入第三方控制套件,以便使用其中一个花哨的Docking/Workspace布局管理器建立一个漂亮的工作区(我知道Prism区域的一些比其他区域更好).

如果你现在从头开始一个项目,你会选择什么?为什么?有关特定推荐体系结构模式的详细信息将非常有用(例如,自动发现模块dll?注入日志记录服务?).基本上,任何想法和建议都会很好.我想进行一次很好的讨论.也许完全有另一个方向你建议进去?我非常处于研究阶段,并希望尽可能多的输入.

我把它放在这里因为我认为它会比Prism/MVVM Light论坛获得更少的偏见,但是,如果有更适合这个问题的地方,请指出我的方向.

.net c# prism unity-container mvvm-light

39
推荐指数
1
解决办法
2万
查看次数