【问题标题】:MVVM load model data when the Page loads页面加载时 MVVM 加载模型数据
【发布时间】:2017-07-03 09:57:58
【问题描述】:

this blog post 为例,通过 [可能] 正确实现 MVVM,我设法让我的数据显示在我的 DataGrid 上。

my previous question for history

唯一的问题是,当我在 ViewModel 上执行 ListCampaignsCommand 时,DataGrid 只会绑定到我的数据,而我目前正在通过按钮命令执行此操作:

<!-- Pages\ManageCampaigns.xaml -->
<Button Name="btnRefresh" Grid.Column="0" Command="{Binding ListCampaignsCommand}"
    Style="{StaticResource TitleButtonLink}" Margin="20,4,0,0">Refresh List
</Button>

<DataGrid x:Name="campaignDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True"
            ItemsSource="{Binding Campaigns}" Grid.Row="1" 
            RowDetailsVisibilityMode="VisibleWhenSelected">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="idColumn" Binding="{Binding Id}"
                            Header="#" Width="SizeToCells" />
        <DataGridTextColumn x:Name="clientColumn" Binding="{Binding Client}"
                            Header="Client" Width="SizeToHeader" />
        <DataGridTextColumn x:Name="dateSentColumn" Binding="{Binding DateSent}"
                            Header="Date" Width="SizeToCells" />
        <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}" Header="Name" Width="SizeToCells"/>
        <DataGridTextColumn x:Name="emailAddressColumn" Binding="{Binding EmailAddress}" Header="Email Address" Width="SizeToCells"/>
    </DataGrid.Columns>
</DataGrid>

我的 ViewModel(它可能比它应该做的更多......该示例不涉及使用 MVVM 与 EF 数据进行交互)获取数据:

// CampaignViewModel
private readonly ObservableCollection<Campaign> _campaigns
    = new ObservableCollection<Campaign>();

public IEnumerable<Campaign> Campaigns
{
    get { return _campaigns; }
}

public ICommand ListCampaignsCommand
{
    get { return new DelegateCommand(ListCampaigns); }
}
public void ListCampaigns()
{
    using (ApplicationDbContext db = new ApplicationDbContext())
    {
        var Campaigns = db.Campaigns.Where(x => x.Deleted == false);
        foreach (var c in Campaigns)
        {
            AddToCampaigns(c);
        }
    }
}
private void AddToCampaigns(Campaign campaign)
{
    if (!_campaigns.Contains(campaign))
        _campaigns.Add(campaign);
}

当我尝试在我的 &lt;Page ...&gt; 上添加 Loaded={Binding ListCampaignsCommand} 时,我收到了一条非常神秘的错误消息:

抛出异常:PresentationFramework.dll 中的“System.Windows.Markup.XamlParseException”

附加信息:“在 'System.Windows.Data.Binding' 上提供值引发异常。”行号“10”和行位置“7”。

该行号和位置是Loaded 调用所在的位置。

如何让页面在打开时加载数据?

【问题讨论】:

  • @mm8 不,我放弃了这种做法,转而采用这种方法

标签: c# wpf xaml mvvm datagrid


【解决方案1】:

如何让页面在打开时加载数据?

在视图模型的构造函数中调用你的ListCampaigns() 方法怎么样?

public class CampaignViewModel
{
    public CampaignViewModel()
    {
        ListCampaigns();
    }

    //the rest of your code...
}

【讨论】:

  • 出于某种原因,我没想到会这么简单,但现在我想起来,也没有真正的理由不应该那么简单。谢谢人:)
猜你喜欢
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多