【发布时间】:2020-12-24 01:31:10
【问题描述】:
我是 MVVM 架构的新手。我正在构建一个 UWP 应用程序。我基本上有一个 View(XAML)、代码背后 (Xaml.cs)、ViewModel 和数据服务。
我的视图/XAML 如下所示:
<Page
x:Class="SnapBilling.SyncModule.SyncView"
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:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
mc:Ignorable="d" Loaded="Page_Loaded"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Grid.Resources>
<!--DataTemplate for Published Date column defined in Grid.Resources. PublishDate is a property on the ItemsSource of type DateTime -->
<DataTemplate x:Key="ProgressTemplate" >
<ProgressBar x:Name="progressBar1" Value="{Binding Value.ProgressPercentage}" Maximum="100" Margin="20"/>
</DataTemplate>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="4*" />
<RowDefinition Height="2*" />
</Grid.RowDefinitions>
<controls:DataGrid x:Name="BackupSummaryDataGrid"
Grid.Row="0"
Margin="40"
ItemsSource="{x:Bind DataContext.UploadProgressInfoDict}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
AlternatingRowBackground="Transparent"
AreRowDetailsFrozen="False"
AreRowGroupHeadersFrozen="True"
AutoGenerateColumns="False"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
ColumnHeaderHeight="32"
FrozenColumnCount="0"
GridLinesVisibility="None"
HeadersVisibility="Column"
HorizontalScrollBarVisibility="Visible"
IsReadOnly="False"
MaxColumnWidth="400"
RowDetailsVisibilityMode="Collapsed"
RowGroupHeaderPropertyNameAlternative="Range"
SelectionMode="Extended"
VerticalScrollBarVisibility="Visible"
>
<controls:DataGrid.Columns>
<controls:DataGridTextColumn Tag="SyncType" Header="Sync Type" Binding="{Binding Key}" IsReadOnly="True" />
<controls:DataGridTextColumn Tag="remaining" Header="Pending Items" Binding="{Binding Value.remainingNow}" IsReadOnly="True" />
<controls:DataGridTemplateColumn Header="% remaining" CellTemplate="{StaticResource ProgressTemplate}" />
<controls:DataGridTextColumn Header="Status" Binding="{Binding Value.ProgressMessage}" IsReadOnly="True"/>
</controls:DataGrid.Columns>
</controls:DataGrid>
</Grid>
</Page>
现在,当页面/视图 xaml 加载时,它调用 xaml 类的构造函数,我们在其中初始化组件并使用视图模型对象设置数据上下文。这是类后面的代码,
public sealed partial class SyncView : Page, IView
{
public SyncView()
{
this.InitializeComponent();
DataContext = new SyncViewModel(ServiceLocator.Current.GetService<ICommonServices>());
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
}
}
现在DataContext = new SyncViewModel(ServiceLocator.Current.GetService<ICommonServices>()); 获取一个已创建的 ViewModel 对象并正确绑定到数据上下文。
问题
当我从Page_Loaded 事件而不是下面的构造函数设置数据上下文时,viewmodel 对象没有绑定到页面的数据上下文。
private void Page_Loaded(object sender, RoutedEventArgs e)
{
DataContext = new SyncViewModel(ServiceLocator.Current.GetService<ICommonServices>());
}
如何解决?
【问题讨论】:
标签: c# mvvm data-binding uwp uwp-xaml