私のwpfアプリケーションでは、Prismライブラリを使用してビューモデルを私のビューにオートワイヤリングしています。私は自動的にビューとモデルをバインドする単純なプロパティのためにこれを動作させています。今、私はデータをバインドして、DataGrid
に結びつけようとしています。以下は現在のシナリオのための私の構造です。バインディングObservableCollection <T> ItemSource to DataGrid
ConfigurationDetails.cs
public class ConfigurationDetails:BindableBase
{
private int _id;
public int Id { get { return _id; } set { SetProperty(ref _id, value); } }
private string _configFName;
private string _configSName;
private string _configUName;
public string ConfigFName { get { return _configFName; } set { SetProperty(ref _configFName, value); } }
public string ConfigSName { get { return _configSName; } set { SetProperty(ref _configSName, value); } }
public string ConfigUName { get { return _configUName; } set { SetProperty(ref _configUName, value); } }
}
ConfigurationWindowViewModel.cs
public class ConfigurationWindowViewModel : BindableBase
{
public ConfigurationWindowViewModel()
{
ConfigDetails = new ObservableCollection<ConfigurationDetails>();
}
private ObservableCollection<ConfigurationDetails> _configDetails;
public ObservableCollection<ConfigurationDetails> ConfigDetails { get { return _configDetails; } set { SetProperty(ref _configDetails, value); } }
}
ConfigurationWindow.xaml
<UserControl x:Class="MyApp.Views.ConfigurationWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
HorizontalContentAlignment="Center">
....
<DataGrid ItemsSource="{Binding ConfigDetails}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="F NAME" Width="*" Binding="{Binding Path=ConfigFName}"/>
<DataGridTextColumn Header="S NAME" Width="*" Binding="{Binding Path=ConfigSName}"/>
<DataGridTextColumn Header="U NAME" Width="*" Binding="{Binding Path=ConfigUName}"/>
</DataGrid.Columns>
</DataGrid>
....
</UserControl>
ConfigurationWindow.xaml.cs
public ConfigurationWindow()
{
InitializeComponent();
using (_db = new MyEntities())
{
var configRecords = _db.tblConfigs.ToList().Select(x => new ConfigurationDetails()
{
ConfigFName = x.ConfigFName,
ConfigSName = x.ConfigSName,
ConfigUName = x.ConfigUName,
Id = x.ConfigID
});
model.ConfigDetails = new ObservableCollection<ConfigurationDetails>(configRecords);
//model.ConfigDetails will have records assigned to it when debugged
}
}
}
しかし、それでもまだ、私は私のDataGrid
に表示されている任意のレコードを表示しません。ここには何が欠けているのですか?私はViewModelLocator.AutoWireViewModel
も使用しており、他のモデルのプロパティでも完璧に動作しています。ここに助けを求めることを願っています。
更新 -ConfigurationWindowViewModel.cs
私はViewModels
フォルダに配置しました。申し訳ありませんが、言及するには欠けている。
はあなた 'ConfigurationWindow'は[たIView](http://brianlagunas.com/getting-started-prisms-new-viewmodellocator/)を実装していますか? – slugster
@slugster 'IView'は、' ViewModel'が私の知る限り 'Views'が存在するのと同じフォルダに置かれている場合にのみ必要です。それ以外の場合は、 'ViewModels'フォルダに置いておくと、' prism'が注意しますか? –
だから、コード内のモデルはどこから来ていますか(そのビューモデルですか)? btwどうしてあなたのデータをコードの中に残しているのですか? – adminSoftDK