【发布时间】: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