相关疑难解决方法(0)

使用MVVM管理多个选择

在我学习MVVM的过程中,我已经建立了对WPF和ViewModel模式的一些基本理解.我在提供列表时使用以下抽象,并且对单个选定项目感兴趣.

public ObservableCollection<OrderViewModel> Orders { get; private set; }
public ICollectionView OrdersView
{
    get
    {
        if( _ordersView == null )
            _ordersView = CollectionViewSource.GetDefaultView( Orders );
        return _ordersView;
    }
}
private ICollectionView _ordersView;

public OrderViewModel CurrentOrder 
{ 
    get { return OrdersView.CurrentItem as OrderViewModel; } 
    set { OrdersView.MoveCurrentTo( value ); } 
}
Run Code Online (Sandbox Code Playgroud)

然后,我可以将OrdersView与支持排序和过滤绑定到WPF中的列表:

<ListView ItemsSource="{Binding Path=OrdersView}" 
          IsSynchronizedWithCurrentItem="True">
Run Code Online (Sandbox Code Playgroud)

这对单选视图非常有效.但我还想支持视图中的多个选择,并让模型绑定到所选项的列表.

如何将ListView.SelectedItems绑定到ViewModel上的backer属性?

.net c# data-binding mvvm

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

基于WPF和MVVM模式中的嵌套模型实体构建ViewModel

我在理解如何基于以下模型构建视图模型时遇到问题

(我将模型简化为更清晰)

public class Hit
{
   public bool On { get; set;}
   public Track Track { get; set; }
}
public class Track
{
   public ObservableCollection<Hit> Hits { get; set; }
   public LinearGradientBrush Color { get; set; }
   public Pattern Pattern { get; set; }
}
public class Pattern
{
   public string Name { get; set; }
   public ObservableCollection<Tracks> Tracks { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,如何构建ViewModels ..

我需要通过模型保持原始关系,beacaus我在Pattern上有一个Serialize()方法,将它序列化为XML文件..(带有相关的Tracks和Hits)

为了能够将模式绑定到用户控件和它的嵌套模板,我还应该有一个带有ObservableCollection <TrackViewModel>的PatternViewModel,对于TrackViewModel和HitViewModel来说也是如此...我需要在查看不属于业务对象的模型(颜色和更多..)

在视图模型上复制模型的所有关系对我来说似乎不是一件好事......并且在编写视图模型时跟踪所有这些关系也更容易出错.

谁有更好的方法/解决方案?

wpf nested mvvm viewmodel

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

在ViewModels之间共享状态

我有两个ViewModel,它们为不同的视图提供相同的模型.一个将模型显示为a中的项目ListBox,另一个将其显示为a中的选项卡TabControl.本TabControl是为那些在选定的项目显示选项卡ListBox,从而使标签来来去去,选择的变化.

我可以通过向IsSelectedModel 添加一个属性并将ViewModels绑定到它来轻松地同步这两个控件(有点像这样),但这会使模型与实际上不属于那里的演示细节混乱.

似乎我需要Model和ViewModels之间的东西来保持这个额外的状态.是否有任何好的方法可以做到这一点?

silverlight wpf xaml mvvm

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

跨ViewModel共享状态/更改

我有一个具有“任务”选项卡和“项目”选项卡的应用程序。我决定为每个选项卡TasksViewModel和ProjectsViewModel创建一个单独的ViewModel。

“任务”选项卡具有一个新任务区域,具有相关的项目下拉菜单,“项目”选项卡(显然)具有项目列表。

我想要的是“任务”选项卡上的下拉列表与“项目”选项卡列表共享相同的集合,这样,每当我在“项目”选项卡上添加或删除项目时,“任务”选项卡上的列表都会自动更新。单个ViewModel可以很好地工作,但是开始变得非常不规则。

我是否应该拆分为两个ViewModel?是否有共享数据的通用方法?也许将相同的内容传递给ObservableCollection<Project>每个ViewModels?可能有一些类型的通知返回到TasksViewModel,类似于ICollectionChanged

感谢任何见识/投入!

wpf xaml mvvm

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

具有多个ViewModel的WPF MVVM ItemsControl,具体取决于对象类型

我有一个集合,它包含多个类型的项目,这些项目都从同一个接口继承.这绑定到ItemsControl.窗口的DataContext设置为包含集合的ViewModel.

我想要做的是让集合中不同类型的每个项目使用不同的ViewModel.

因此,如果我在itemscontrol中的模板设置如下,我希望第一个模板具有ViewModel1的DataContext,第二个模板具有ViewModel2的DataContext.我无法直接在它们上设置DataContext,因为ItemsControl会将DataContext设置为该项.

任何人都知道这个解决方案,或者使用MVVM更好的方法吗?

<DataTemplate DataType="{x:Type Models:ItemType1}">
    <Controls:MyControl Text="{Binding Body}"/>
</DataTemplate>

<DataTemplate DataType="{x:Type Models:ItemType2}">
    <Controls:MyControl2 Text="{Binding Body}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm

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

标签 统计

mvvm ×5

wpf ×4

c# ×2

xaml ×2

.net ×1

data-binding ×1

nested ×1

silverlight ×1

viewmodel ×1