C# 让datagrid使用反射创建具有未知类型的列
我有两个模型C# 让datagrid使用反射创建具有未知类型的列,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有两个模型 Case1ViewModel : ViewModelBase, ITestInterface Case2ViewModel : ViewModelBase, ITestInterface 它们都继承自ITestInterface,该接口为空 然后我有一个 ObservableCollection<ITestInterface> XAML _嗯 _取消 本例中的结果是,我获得了对应字符串,但不会显示来自批发商DialogTradeItemViewModel的所有其
Case1ViewModel : ViewModelBase, ITestInterface
Case2ViewModel : ViewModelBase, ITestInterface
它们都继承自ITestInterface,该接口为空
然后我有一个
ObservableCollection<ITestInterface>
XAML
_嗯
_取消
本例中的结果是,我获得了对应字符串,但不会显示来自批发商DialogTradeItemViewModel的所有其他属性,如果我从界面中删除对应项,则不会显示任何内容
另一个示例(右键单击以显示全尺寸)答案以替换结束
public ObservableCollection<ITestInterface> Transactions
公共可观测收集事务
与
公共可观测收集事务
显然,这迫使编译器使用反射来找出要显示的内容,如果我使用该接口,它也会将该发布到您的XAML中。我已经删除了我的答案,因为它没有回答您的问题。我看看能不能找到更有用的。。。
public string TradeDirection
{
get { return _tradeDirection; }
set
{
_tradeDirection = value;
OnPropertyChanged(() => TradeDirection);
}
}
public string Book
{
get { return _book; }
set
{
_book = value;
OnPropertyChanged(() => Book);
}
}
public string Counterpart
{
get { return _counterpart; }
set
{
_counterpart = value;
OnPropertyChanged(() => Counterpart);
}
}
public string Product
{
get { return _product; }
set { _product = value; OnPropertyChanged(() => Product); }
}
public string Delivery
{
get { return _delivery; }
set { _delivery = value; OnPropertyChanged(()=> Delivery);}
}
public string Period
{
get { return _period; }
set { _period = value; OnPropertyChanged(() => Period);}
}
public int Volume
{
get { return _volume; }
set { _volume = value; OnPropertyChanged(() => Volume);}
}
public int Price
{
get { return _price; }
set { _price = value; OnPropertyChanged(() => Price);}
}
}
public interface ITestInterface
{
string Counterpart { get; }
}
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<DataGrid
Grid.Row="0"
Width="600"
SelectionMode="Extended"
SelectionUnit="FullRow"
CanUserDeleteRows="False"
CanUserResizeRows="False"
IsReadOnly="True"
AutoGenerateColumns="True"
AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn"
ItemsSource="{Binding Transactions, Mode=OneWay}">
</DataGrid>
<Grid
Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
Grid.Column="0"
Margin="5,10,5,0"
cal:Click.Command="{Binding SaveCommand}"
Height="25">
<AccessText>_OK</AccessText>
</Button>
<Button
Grid.Column="1"
Margin="5,10,5,0"
cal:Click.Command="{Binding CancelCommand}"
Height="25">
<AccessText>_Cancel</AccessText>
</Button>
</Grid>
</Grid>
public ObservableCollection<ITestInterface> Transactions
public ObservableCollection<object> Transactions