【发布时间】:2013-05-16 17:39:21
【问题描述】:
所有,一个简单的问题。我有一个带有 DataGrid 的 MVVM 应用程序,我已使用
<DataGrid ItemsSource="{Binding Path=Resources}" ...></DataGrid>
Resources 是通过
public ObservableCollection<ResourceViewModel> Resources { get; private set; }
然而,在ResourceViewModel 类中,我不仅有我想出现在DataGrid 中的属性,还有我不想 出现在DataGrid 中的其他属性。 ResourceViewmodel 类是
public class ResourceViewModel : WorkspaceViewModel, IDataErrorInfo
{
readonly Resource resource;
readonly ResourceDataRepository resourceRepository;
private bool isSelected;
public ResourceViewModel(Resource resource, ResourceDataRepository resourceRepository)
{
if (resource == null)
throw new ArgumentNullException("resource");
if (resourceRepository == null)
throw new ArgumentNullException("resourceRepository");
this.resource = resource;
this.resourceRepository = resourceRepository;
}
public string KeyIndex
{
get { return this.resource.KeyIndex; }
set
{
if (value == this.resource.KeyIndex)
return;
this.resource.KeyIndex = value;
base.OnPropertyChanged("KeyIndex");
}
}
public string FileName
{
get { return this.resource.FileName; }
set
{
if (value == this.resource.FileName)
return;
this.resource.FileName = value;
base.OnPropertyChanged("FileName");
}
}
public List<string> ResourceStringList
{
get { return this.resource.ResourceStringList; }
set
{
if (Utilities.Utilities.ScrambledEquals<string>(this.resource.ResourceStringList, value))
return;
this.resource.ResourceStringList = value;
base.OnPropertyChanged("ResourceStringList");
}
}
public bool IsSelected
{
get { return isSelected; }
set
{
if (value == isSelected)
return;
isSelected = value;
base.OnPropertyChanged("IsSelected");
}
}
}
我不希望IsSelected 出现在DataGrid 中并且我希望ResourceStringList 中的每个项目出现在Datagrid 的不同列中。我的问题是:
1.如何防止IsSelected 在DataGrid 中显示[作为Checkbox]?
2。如何绑定到DataGrid 以自动在单独的列中显示项目?
你有什么尝试:
我试图从
ResourceViewmodel类继承并绑定到它,但这很恶心,我想要另一个更优雅的解决方案;请:]。我不知道如何继续这个。
List中存储的项目数是可变的,并在运行时设置 - 所以这需要是List。
一如既往,非常感谢您抽出宝贵时间。
【问题讨论】:
-
您可以手动创建自己的列。请参阅DataGrid.AutoGenerateColumns 了解更多信息。
-
如果每行 ResourceStringList 中的项目数不同,您要生成多少列,它们的标题应该是什么?
-
当人们在 MVVM 模式中使用 ObservableCollection 时,我总是感到困惑。我认为如果您使用 MVVM 就没有必要……而且我真的从来不需要它,因为没有它总是有解决方案。 ://
标签: c# wpf mvvm binding datagrid