我无法解决这个问题。
我使用外部DLL,其中包含自定义类型类。如果我使用ItemsSource将我的ie dataGrid绑定到ObservableCollection,并设置<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
,则会产生一个空单元格。如果我<DataGridTextColumn Header="Name" Binding="{Binding .}" />
它会显示 NameSpace.externalClass 类型。
我使用它来声明myExternalClass如下:
public class myExternalClass
{
public string Name { get; private set; }
public string Comment { get; private set; }
public myExternalClass(externalClass ec)
{
Name = ec.Name;
Comment = ec.Comment;
}
}
这就是我的财产的样子:
private ObservableCollection<myExternalClass> _dataSets;
public ObservableCollection<myExternalClass> DataSets
{
get { return _dataSets; }
set
{
if (_dataSets!= value)
{
_dataSets= value;
NotifyOfPropertyChange(() => DataSets);
}
}
}
因此,我必须遍历原始externalClass的对象并使用myExternalClass创建实例。它是这样的,但必须有一个正确的方法,对吧?如何在不编写&#34;包装器的情况下公开外部类&#34;上课吗?
我也是第一次在这个wpf程序中实现MVVM模式(caliburn.micro)。它有一个陡峭的学习曲线;(
谢谢!
修改
我甚至可以直接访问这些值:
externalDataManager = new externalDataManager();
_dataSets = new ObservableCollection<externalClass>(externalDataManager.EnumDataSets(false));
Debug.Assert(false, _dataSets[0].Name);
Assert使用原始的externalClass显示正确的值。将Collection绑定到视图中的某个控件时,为什么会失败?
EDIT2:
<UserControl x:Class="FirstMVVM.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:cal="http://www.caliburnproject.org"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:local="clr-namespace:FirstMVVM.Views"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="525">
<StackPanel Orientation="Vertical">
<DataGrid ItemsSource="{Binding DataSets, Mode=TwoWay}" AutoGenerateColumns="False" MinWidth="340" Margin="23,37,12,95" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Comment" Binding="{Binding Comment}" />
</DataGrid.Columns>
</DataGrid>
<ComboBox x:Name="DataSets" DisplayMemberPath="Name"/>
</StackPanel>
</UserControl>
数据网格中的行数和组合框中的元素数是正确的,它们只是空值。