标签: mvvm-light

在WP7和MVVMLight中查看基类

我在我的项目中有多个视图,并希望它们从一个处理某些导航逻辑的基类派生.这个逻辑不属于VM,所以我将它放在View中.

现在,当我试图更改视图的基类时,我收到以下错误:

"ProjectName.Results"的部分声明不得指定不同的基类.

我唯一改变的是:

public partial class Results : PhoneApplicationPage
Run Code Online (Sandbox Code Playgroud)

至:

public partial class Results : BaseView
Run Code Online (Sandbox Code Playgroud)

我在项目中找不到任何其他结果类的删除.也许MVVMLight在构建时会产生一些东西.

是否可以让视图派生自基类?它应该是,但我不能让它工作.

c# silverlight windows-phone-7 mvvm-light

1
推荐指数
1
解决办法
885
查看次数

通过MVVMLight发送命令

我正在使用MVVMLight并经历一些学习曲线,试图找出通信的工作原理.我理解Properties如何与Silverlight绑定一起工作,这一切都很简单.

现在我想知道的是发送Message as a Command的最佳方法是什么.因此,例如,我想向我的ViewModel发送一条消息以清除其列表.

所以我可以创建一个枚举来充当命令

enum MessageOp
{
    Reset
}
Run Code Online (Sandbox Code Playgroud)

但是,我怎么能把它作为命令发送?目前我发送它作为类,但然后需要再次作为令牌发送它.像这样:

Messenger.Default.Send<MessageOp>(MessageOp.Reset, MessageOp.Reset);
Run Code Online (Sandbox Code Playgroud)

我在ViewModel中的代码是这样的:

Messenger.Default.Register<MessageOp>(
    this, MessageOp.Reset,
    delegate(MessageOp op)
    {
        // Erase all entries
        MyDictionary.Clear();
    });
Run Code Online (Sandbox Code Playgroud)

我想到的一种方法是创建一个完全空的类来充当命令.这是最好的方法,因为我觉得有点奇怪创建空类来表现这样

mvvm-light

1
推荐指数
1
解决办法
1465
查看次数

在RelayCommand方法中获取listboxitem的句柄

这适用于WP7.我在列表框itemtemplate中有一个按钮.在关联的ViewModel中,我有RelayCommand,它已经绑定到Button的Click事件(使用MVVMLight EventToCommand).我想要的只是在单击按钮时传入ListBox的ListItem.

有任何想法吗?

windows-phone-7 mvvm-light

1
推荐指数
1
解决办法
319
查看次数

任何避免ShowDialog()阻止Messenger的解决方案?

我正在开发一个基于mvvm light toolkit的项目.我有一个MainView和一个DetailsView相应的ViewModels.两个虚拟机都注册了NotificationMessage.

// MainViewModel.cs and DetailsViewModel.cs
private void RegisterMessages()
{
    Messenger.Default.Register<NotificationMessage>(this, NotificationMessageHandler);
}
Run Code Online (Sandbox Code Playgroud)

收到"ShowDetails"消息时,MainViewModel调用创建"DetailsView"的服务

// MainViewModel.cs
private void NotificationMessageHandler(NotificationMessage msg)
{
    if (msg.Notification == "ShowDetails")
    {
        _detailsService.ShowDetails(); // Does something like (new DetailsView).ShowDialog()
    }
}
Run Code Online (Sandbox Code Playgroud)

DetailsView用途ViewModelLocator,以获得现有DetailsViewModal的DataContext的.

DetailsViewModel应该接收"ShowDetails"消息来更新其内部状态或要求的一些数据,也.

// DetailsViewModel.cs
private void NotificationMessageHandler(NotificationMessage msg)
    {
        if (msg.Notification == "ShowDetails")
        {
            UpdateViewModel();
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在的问题是:因为我希望它DetailsView是一个模态窗口,我会调用ShowDialog()它.这似乎阻止了信使,直到DetailsView再次关闭.因此,DetailsViewModal在模态窗口关闭后接收消息.有没有解决方法可以解决这个问题?

如果我能在DetailsViewModal …

c# wpf modal-dialog mvvm-light

1
推荐指数
1
解决办法
406
查看次数

在集合中公开的模型中实现INotifyPropertyChanged

我在一个用DataTemplate设计的ObservableCollection中暴露了一个Model类,其中处理了Model的proeprty绑定.

当我手动在Model类中实现INotifyPropertyChanged接口时,ObservableCollection中的绑定proeprty不会自动更改,而只是在重新呈现集合之后.

当我从ViewModelBase(MVVM Light工具包类)继承并使用RasiePropertyChanged方法时,绑定属性会自动更改而不刷新整个集合.

除了实现INotifyPropertyChanged接口之外,ViewModelBase做了什么?

c# wpf mvvm mvvm-light

1
推荐指数
1
解决办法
1602
查看次数

"'MainViewModel'类型必须从DependencyObject派生"

我正在尝试为MVVMLight WPF重新配置我的MVVMLight SL5应用程序.
我想我已经连接了所有正确的GalaSoft库,但在启动时我得到了标题中显示的异常.
获取MainPage的ViewModel时,它出现在ViewModelLocator中:

    public MainViewModel Main
    {
        get
        {
            MainViewModel mvm = null;
            try
            {
                mvm = ServiceLocator.Current.GetInstance<MainViewModel>();
            }
            catch (Exception xx)
            {
                System.Diagnostics.Debug.WriteLine(xx.Message);
            }
            return mvm;
        }
    }
Run Code Online (Sandbox Code Playgroud)

例外来自GetInstance()调用.
MainPage源自Window; DataContext在xaml中设置.

    DataContext="{Binding Main, Source={StaticResource Locator}}"
Run Code Online (Sandbox Code Playgroud)

任何关于出错的提示都将不胜感激....(目标.Net 4.5,GalaSoft WPF4 libs v4.0.30319)

wpf mvvm-light

1
推荐指数
1
解决办法
4480
查看次数

如何打开/加载vsix文件

我正在尝试将MvvmLight Toolkit安装到我的Visual Studio中.我有一个VSIX文件,如下所示 -

在此输入图像描述

当我尝试打开它(通过双击)时,它要求我选择一个程序打开...

像这样..

在此输入图像描述

我不知道该怎么做.

有人能告诉我如何使用vsix文件安装MvvmLight吗?我正在使用Visual Studio Ultimate 2012.

visual-studio mvvm-light vsix visual-studio-2012

1
推荐指数
1
解决办法
5863
查看次数

mvvm light - 使用回调发送通知消息

我需要在我的视图模型中使用FolderBrowserDialog的结果,

CodeBehind.cs

 private static void SelectFolderDialog()
    {
        using (System.Windows.Forms.FolderBrowserDialog folderdialg = new System.Windows.Forms.FolderBrowserDialog())
        {
            folderdialg.ShowNewFolderButton = false;
            folderdialg.RootFolder = Environment.SpecialFolder.MyComputer;

            folderdialg.Description = "Load Images for the Game";
            folderdialg.ShowDialog();
            if (folderdialg.SelectedPath != null)
            {
                var notifypath = new GenericMessage<string>(folderdialg.SelectedPath);
                Messenger.Default.Send(notifypath);

            }
        }
Run Code Online (Sandbox Code Playgroud)

我正在计划的是,从View-model发送带回调的通知到视图,执行FolderBrowserDialog将Selected路径返回给视图模型.

如何使用MVVM-Light发送带回调/ NotificationWithAction的notificationmessage.请帮我一个样本,因为我是Wpf和MVVM-Light的新手.

任何帮助表示赞赏

c# wpf mvvm mvvm-light

1
推荐指数
1
解决办法
5821
查看次数

DependencyProperty绑定问题

我创建了一个小的文件浏览器控件:

<UserControl x:Class="Test.UserControls.FileBrowserControl"
             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:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="44" d:DesignWidth="461" Name="Control">
    <Grid Margin="3">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBox  Margin="3" Text="{Binding SelectedFile}" IsReadOnly="True" TextWrapping="Wrap" />
        <Button HorizontalAlignment="Right" Margin="3" Width="100" Content="Browse" Grid.Column="1" Command="{Binding BrowseCommand}" />
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

使用以下代码:

public partial class FileBrowserControl : UserControl
{
    public ICommand BrowseCommand { get; set; }
    //The dependency property
    public static DependencyProperty SelectedFileProperty = DependencyProperty.Register("SelectedFile",
        typeof(string),typeof(FileBrowserControl), new PropertyMetadata(String.Empty));
    public string SelectedFile { get{ return (string)GetValue(SelectedFileProperty);}  set{ SetValue(SelectedFileProperty, value);}}
    //For my first test, this is …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf mvvm-light

1
推荐指数
1
解决办法
678
查看次数

如何在SimpleIOC中注册包含参数的类实例

我需要使用创建时传递给ViewModel的特定参数来创建ViewModel的实例。同时,此ViewModel实例应在SimpleIOC中注册

我认为这是解决问题的方法:

SimpleIoc.Register<TClass> Method (Func<TClass>, String, Boolean)
Run Code Online (Sandbox Code Playgroud)

将设置true为最后创建的最后一个参数。因此,如果我正确理解,则此方法希望引用将创建我的ViewModel实例的方法。

看起来这叫做ClassFactory。

我尝试自己做,但我得到的只是

cannot convert from <Class> to System.Func<Class>
Run Code Online (Sandbox Code Playgroud)

因此似乎即时传递的总是类的实例,而不是应该创建该类的方法。

有人可以举一个简短的例子,我如何使它工作

public class ClassFactory
{
    public ChatWindow CreateChatWindow(RosterItemX ri)
    {
        return new ChatWindow(ri);
    }
}


public class ViewModelLocator
{
.
.
.
.
    public static void CreateWindow(RosterItemX riv)
    {
        ClassFactory cf = new ClassFactory;

        SimpleIoc.Default.Register<ChatWindow>(cf.CreateChatWindow(ri), "key", true )
        var _messageWindow = new MessageWindow();
        _messageWindow.Show();
    }
}


class ChatMessage
{
    RosterItemX ri = new RosterItemX();
    ViewModelLocator.CreateWindow(ri);


}
Run Code Online (Sandbox Code Playgroud)

c# ioc-container mvvm-light

1
推荐指数
1
解决办法
2331
查看次数