我得到了一些麻烦与结合使用MVVM工具包,并会向likr一些knwo告知,如果我正确地做事情。首先,我有一个定义如下视图模型定位:数据绑定与MVVM光工具包
public class ViewModelLocator
{
private static MainViewModel _main;
private static ProductViewModel _product;
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
////if (ViewModelBase.IsInDesignModeStatic)
////{
//// // Create design time view models
////}
////else
////{
//// // Create run time view models
////}
CreateMain();
CreateProduct();
}
/// <summary>
/// Gets the Main property.
/// </summary>
public static MainViewModel MainStatic
{
get
{
if (_main == null)
{
CreateMain();
}
return _main;
}
}
/// <summary>
/// Gets the Main property.
/// </summary>
public static ProductViewModel ProductStatic
{
get
{
if (_product == null)
{
CreateProduct();
}
return _product;
}
}
/// <summary>
/// Gets the Main property.
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
"CA1822:MarkMembersAsStatic",
Justification = "This non-static member is needed for data binding purposes.")]
public MainViewModel Main
{
get
{
return MainStatic;
}
}
/// <summary>
/// Gets the Main property.
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
"CA1822:MarkMembersAsStatic",
Justification = "This non-static member is needed for data binding purposes.")]
public ProductViewModel Product
{
get
{
return ProductStatic;
}
}
/// <summary>
/// Provides a deterministic way to delete the Main property.
/// </summary>
public static void ClearMain()
{
_main.Cleanup();
_main = null;
}
/// <summary>
/// Provides a deterministic way to create the Main property.
/// </summary>
public static void CreateMain()
{
if (_main == null)
{
_main = new MainViewModel();
}
}
/// <summary>
/// Provides a deterministic way to create the Main property.
/// </summary>
public static void CreateProduct()
{
if (_product == null)
{
_product = new ProductViewModel();
}
}
/// <summary>
/// Cleans up all the resources.
/// </summary>
public static void Cleanup()
{
ClearMain();
}
}
然后,我有我的,我设置的DataContext作为主窗口: 的DataContext =“{绑定源= {X:静态虚拟机:ViewModelLocator.MainStatic}}”
在我的主窗口中我有一个列表框,这将有作为的ItemSource ProductViewModel的集合定义如下:
public class ProductViewModel : ViewModelBase
{
SvcProduct.ProductServiceClient _clientSvc =new SvcProduct.ProductServiceClient() ;
ObservableCollection<Product> _products = new ObservableCollection<Product>();
public ObservableCollection<Product> Products
{
get { return _products; }
set { _products = value; }
}
/// <summary>
/// Initializes a new instance of the ProductViewModel class.
/// </summary>
public ProductViewModel()
{
////if (IsInDesignMode)
////{
//// // Code runs in Blend --> create design time data.
////}
////else
////{
//// // Code runs "for real": Connect to service, etc...
////}
_products=_clientSvc.GetProducts();
}
////public override void Cleanup()
////{
//// // Clean own resources if needed
//// base.Cleanup();
////}
}
在产品
ProductViewModel返回集合的列表框。在列表框中的每一项连接到的ProductView这是一个用户控件定义如下:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Solatys.Presentation.ViewModel"
mc:Ignorable="d"
x:Class="Solatys.Presentation.ProductView"
x:Name="UserControl"
d:DesignWidth="640" d:DesignHeight="480" Width="433" Height="319"
IsManipulationEnabled="True"
DataContext="{Binding Source={x:Static vm:ViewModelLocator.ProductStatic}}">
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="144.3"/>
<ColumnDefinition Width="0.64*"/>
<ColumnDefinition Width="144.3"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="35" MaxHeight="35"/>
<RowDefinition Height="130" MaxHeight="130"/>
<RowDefinition Height="130" MaxHeight="130"/>
<RowDefinition Height="24" MaxHeight="24"/>
</Grid.RowDefinitions>
<Image Source="Resources/beauté.jpg" Grid.Row="1" Stretch="UniformToFill" Grid.RowSpan="2" Grid.ColumnSpan="3"/>
<TextBlock TextWrapping="Wrap" Grid.Column="1" Text="{Binding ProductName}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" Foreground="White" FontFamily="Perpetua Titling MT" TextAlignment="Justify"/>
<Border BorderBrush="Black" BorderThickness="0" Grid.Row="3" Grid.ColumnSpan="3">
<Border.Background>
<RadialGradientBrush>
<GradientStop Color="#00000000" Offset="1"/>
<GradientStop Color="#FF005E01"/>
</RadialGradientBrush>
</Border.Background>
<TextBlock TextWrapping="Wrap" Text="Coup de Coeur" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Perpetua" TextAlignment="Justify" FontSize="13.333"/>
</Border>
<Border Grid.Row="1" Grid.Column="0" Background="#7F000000" d:LayoutOverrides="Width">
<TextBlock TextWrapping="Wrap" Foreground="White" FontFamily="Perpetua" Margin="5"><Run Text="Type de produit"/><Run Language="fr-fr" Text=" : "/><LineBreak/><Run Language="fr-fr"/><LineBreak/><Run Language="fr-fr" Text="Produit de beauté Bio"/></TextBlock>
</Border>
<Border HorizontalAlignment="Right" Grid.Row="1" Grid.Column="2" Width="144.3" Height="130" Background="#7F000000">
<TextBlock Margin="5" TextWrapping="Wrap" Foreground="White" FontFamily="Perpetua"><Run Text="Court descriptif"/><LineBreak/><Run/><LineBreak/><Run Language="fr-fr" Text="Ce nouveau produit reste notre coup de coeur pour ses propriétés naturelles ..."/></TextBlock>
</Border>
<Border HorizontalAlignment="Center" Grid.Row="2" Grid.Column="1" Width="144.3" Height="130" Background="#7F000000">
<TextBlock TextWrapping="Wrap" Margin="5" Foreground="White" FontFamily="Perpetua"><Run Text="Caractéristiques du produit"/><Run Language="fr-fr" Text=" : "/><LineBreak/><Run Language="fr-fr"/><LineBreak/><Run Language="fr-fr" Text="- rajeunissant"/><LineBreak/><Run Language="fr-fr" Text="- vivifiant"/><LineBreak/><Run Language="fr-fr" Text="- prix attractif"/><LineBreak/><Run Language="fr-fr" Text="- produit contrôlé"/></TextBlock>
</Border>
</Grid>
正如你可以看到在DataContext上面设置为ViewModelLocator.ProductStatic但它说,像一个错误由于它似乎绑定不工作作为我的列表框是我的主要窗口
1-任何想法,我做错了该错误空“无法创建ViewModelLocator的实例”
? 2。在我的情况,我应该怎么绑定的ItemSource作为集合是ProductViewModel的集合?
问候 哔叽
我发现,这些问题来自调用WCF服务代理。如果我从VIew的创建中删除代理服务器电话,我没有这个错误。我应该如何处理这种情况,那么当我需要一个电话到服务,以获得我的产品的清单,并将其绑定到视图?任何提示,couls找不到示例 – serge
如果仅在加载页面后调用WCF服务会发生什么情况?你在WCF服务中看到异常吗?您是否尝试调试该调用并查看它出了什么问题?在http://www.galasoft.ch/mvvmvideo2上查看我的Deep Dive MVVM的指导 – LBugnion