相关疑难解决方法(0)

WPF MVVM导航视图

我有一个包含多个视图的WPF应用程序.我想从视图1到视图2的toswitch,从那里我可以切换到多个视图.所以我想在视图1上有一个按钮,它在同一窗口中加载view2.

我试过这些东西,但不能让它发挥作用.

从第一个链接问题是我不理解viewmodellocator代码.他们调用CreateMain(); 函数但是这个定义在哪里,以及如何从视图内部切换到另一个视图.

c# navigation wpf mvvm

44
推荐指数
2
解决办法
6万
查看次数

如何在两个ViewModel之间建立通信/传递数据

我知道这个问题已经被多次询问了,我已经阅读了很多关于它的答案.然而,它们都没有满足我的要求,因此我需要一些建议.

我目前正在开发的应用程序如下所示:http: //screenshooter.net/100101493/smrkpog

它是基于MVVM Light Toolkit的WPF MVVM应用程序.带网格的区域是ListBox+ Canvas.这些项目(让我们称之为"Neumes")再次由ListBox+ Canvas每个组成,并由用户动态创建.每个Neume都由'Elements'组成,它们呈现为红色形状.

当用户双击Neume时,将打开一个新窗口.它应该能够编辑(翻译,调整大小,旋转)所选Neume所构成的元素.我想要做的是将存储在MainViewModel中的SelectedNeume(带有一个Elements列表)传递给我新创建的窗口的ViewModel.我对如何实现这个有一些想法:

  1. 完全跳过新的ViewModel并将MainViewModel设置为DataContext新窗口的,
  2. 在新的ViewModel中创建一个'MainViewModel'字段,并在打开一个新窗口时将其传递给那里
  3. 使用MVVM Light Toolkit提供的Messaging/Mediator模式.

我正在寻找既简单又整洁的解决方案.我很乐意使用选项3.但就WPF而言,我是一个相对新手,并且不知道如何真正开始.此外,我担心当主ListBox上的双击事件被触发时,新窗口打开的事实可能会出现问题,因为我找不到将命令绑定到ListBoxItem的方法.它的Style还是DataTemplate(事件触发器/ EventToCommand解决方案对我不起作用).

这是事件:

    private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var item = ((FrameworkElement)e.OriginalSource).DataContext as Neume;
        if (item != null)
        {
            var view2 = new EditWindow();
            view2.Owner = this;
            view2.SetDataContext();
            view2.ShowDialog();
        }
    }  
Run Code Online (Sandbox Code Playgroud)

SetDataContext()方法当前负责根据1.选项绑定DataContext:

public void SetDataContext()
    {
        if(this.Owner != null)
            DataContext = this.Owner.DataContext;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是:你会推荐哪种方案?1.或2.是否有任何问题?可能的内存泄漏?

c# wpf xaml mvvm mvvm-light

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

数据绑定 ListView ItemTemplate UserControl

我的 Windows 通用页面上有一个 ListView。我使用 UserControl 来定义我的 ItemTemplate,以便我可以使用relativepanel 和 VisualStateManager 来控制我的项目根据屏幕尺寸的显示方式...

<ListView ItemsSource="{Binding Path=AllThings}"
          ItemContainerStyle="{StaticResource ListViewItemStyle}">
    <ListView.ItemTemplate>
         <DataTemplate>
             <local:CrossingControl />
         </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

我的 UserControl 中有一个按钮,我想将其 Command 绑定到 ViewModel 中的命令属性,该属性是列表本身的 DataContext ...

<UserControl ...>
    <RelativePanel>
    <StackPanel x:Name="crossedEntryPanel">
        <Button Command="{Binding DataContext.DeleteCommand,
                          RelativeSource={RelativeSource Mode=TemplatedParent}}"
                                    CommandParameter="{Binding}"
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 ElementName 绑定,但它似乎不起作用(我想是因为我的 listview 元素名称是在另一个 xaml 文件中定义的)。我也尝试过上面的RelativeSource 绑定,但这似乎也不起作用。我怎样才能正确绑定它?

xaml win-universal-app

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

在视图模型之间传递参数

在我的应用程序中,我有2个视图.列表(GridView)和表单.我正在改变这个线程中提出的视图: WPF MVVM切换用户控件

现在我有一个问题,如何在单击编辑后传递所选项目的ID以显示带有编辑表单的新视图.

简单的应用程序列出所有项目,添加新的,删除和编辑.我怎样才能在MVVWM中做到这一点?


UPDATE

我只是想创建一个简单的应用程序,左侧有菜单:

  1. 名单
  2. 添新.

单击列表时,它会显示带有列表和3个按钮的UC:添加,编辑,删除.点击添加后,编辑它会显示带有特定值的表格的UC(编辑时).我怎么能实现这个?

wpf mvvm

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

标签 统计

mvvm ×3

wpf ×3

c# ×2

xaml ×2

mvvm-light ×1

navigation ×1

win-universal-app ×1