将xaml代码移到视图模型类后面

时间:2014-02-03 07:48:20

标签: c# .net wpf xaml mvvm

我正在尝试在WPF中的usercontrol内加载window

MainWindow.XAML (为了提高知名度而简化)

<Window x:Class="CoffeeShop.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="700" Width="625">

   <Grid>
        <ContentControl HorizontalAlignment="Left" Margin="10,10,10,10" Name="orderTable" >
            <Grid>

            </Grid>
        </ContentControl>
    </Grid>
</Window>

在代码隐藏中,我正在创建usercontrol的实例,并在其中设置itemsSource的{​​{1}}。将datagrid加载到我的userControl页面的contentControl内。

MainWindow.XAML.cs

xaml

我创建了一个名为 // OrderTable is my `userControl` OrderTable order = new CoffeeShop.OrderTable(); order.PayButton.Click += OnPayButtonClicked; order.dataGrid1.ItemsSource = itemsList; 的ViewModel类,OrderViewModel包含

OrderViewModel.cs

问题是如何将其应用于namespace CoffeeShop.ViewModel { class OrderViewModel { public Order OrdersViewModelProperty { get; set; } public OrderViewModel() { OrdersViewModelProperty = new Order(); // Adopt the MVVM pattern ??? // Bring the above code in the MainWindow.XAML.cs here ? } } } 模型?提到了很多教程,但仍然觉得有点难以实现。任何指针都非常感激。

修改

MVVM

我按照指针尝试,但这是显示<Window x:Class="dataTemplate.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <ContentControl Content= "{Binding Path=MyOrderViewModelProperty}"> <DataTemplate DataType="{x:type local:OrderViewModel}"> <view:UserControl1 /> <DataTemplate/> </ContentControl> </Grid> </Window> 的错误。

1 个答案:

答案 0 :(得分:1)

答案很简单:使用DataTemplate,使用Binding。

viewmodel的datatemplate

 <DataTemplate DataType="{x:type local:OrderViewModel}">
   <view:MyOrderViewWithDataGridAndSoOn />
 <DataTemplate/>

将orderviewmodel的实例绑定到contentcontrol

 <ContentControl Content="{Binding Path=MyOrderViewModelProperty}"/>
这就是全部。在你的视图中你也应该使用绑定。例如:

<DataGrid ItemsSource="{Binding Path=MyItemsListProperty}"/>