【问题标题】:MVVM child dialog datagrid not populatingMVVM 子对话框数据网格未填充
【发布时间】:2014-03-21 17:07:12
【问题描述】:

我正在用 MVVM 编写一个 wpf 应用程序。我的任务是在具有数据网格的显示模型对话框中填充搜索结果。我能够将数据检索到父视图模型中,但它没有在子对话框中填充。请帮我解决我做错的地方。代码编写如下:

对话框视图:

 <DataGrid Name="grdSearchResult" Grid.Column="0" Grid.Row="0" GridLinesVisibility="All" 
              ItemsSource="{Binding Path=SearchResult, ElementName=SearchResultWindow}" 
              AutoGenerateColumns="False" Width="470" Height="250" Margin="0,5,0,0">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" IsReadOnly="True" Width="40" Binding="{Binding Path=Id}"/>
            <DataGridTextColumn Header="Object Name" IsReadOnly="True" Width="175" Binding="{Binding Path=ObjName}"/>
            <DataGridTextColumn Header="Object Type" IsReadOnly="True" Width="175" Binding="{Binding Path=ObjTyp}"/>
            <DataGridCheckBoxColumn Header="Locate" IsReadOnly="True" Width="50">                    
            </DataGridCheckBoxColumn>
        </DataGrid.Columns>
    </DataGrid>

视图模型:

public void performQuickSearch() {

LabelTextOfCustomCtrl = this.SearchPattern;
      string s = this.SearchPattern;

        if (!String.IsNullOrEmpty(SearchPattern)) {

        private ObservableCollection<QuickSearchResult> _searchResult = new ObservableCollection<QuickSearchResult>();

                         var result = ERUSDataProvider.Instance.QuickSearch(SearchPattern);

                    if (result != null) {
                       result.ToList().ForEach(val => _searchResult.Add(new QuickSearchResult {
                    Id = val.Id,
                    ObjName = val.ObjName,
                    ObjTyp = val.ObjTyp
                }));
            }

            SearchResultDialog dialogue = new SearchResultDialog();
            dialogue.DataContext = this;
            dialogue.Owner = App.Current.MainWindow;
            dialogue.ShowDialog();
        }

}

结果类型:

enter code here

public class QuickSearchResult : ViewModelBase {
    public int? Id { get; set; }
    public string ObjName { get; set; }
    public string ObjTyp { get; set; }
}

【问题讨论】:

  • 我在您的代码中看不到公共属性 SearchResult。此外,您不需要 ElementName=SearchResultWindow 部分。
  • 为什么不直接将数据传递给 SearchResultsDialogViewModel?您尝试将视图连接在一起以在它们之间传递数据,而不是使用 ViewModels

标签: c# wpf mvvm datagrid


【解决方案1】:

您正在写MVVM,但写错了。为什么要从DialogWindow 分享ViewModel

此外,对DialogElementName 进行绑定也无济于事,因为与MainWindow 相比,Modal dialog 具有不同的Visual Tree

我建议创建自己的DialogViewModel 并将其DataContext 设置为该对象。确保实现INotifyPropertyChanged 并在SearchResults 属性上引发事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多