我正在尝试使用一列作为组合框填充数据网格,但我需要在绑定到组合框的集合为空时,该列成为文本框列。我已经将列定义如下:
绑定绑定= new Binding(“DataContext.Prices”); binding.RelativeSource = new RelativeSource(RelativeSurceMode.FindAncestor,typeof(UserControl),1);
DataGridComboBoxColumn productPrices = new DataGridComboBoxColumn()
{
ElementSyle = new Style
{
TargetType = typeof(ComboBox),
Setters =
{
new Setter
{
Property=ComboBox.ItemsSourceProperty,
Value= binding
}
}
},
EditingElementSyle = new Style
{
TargetType = typeof(ComboBox),
Setters =
{
new Setter
{
Property=ComboBox.ItemsSourceProperty,
Value= binding
}
}
},
DisplayMemberPath = new Binding("Price");
SelectedValuePath = new Bindnt("Price");
};
myDataGrid.Columns.Add(productPrices);
myDataGrid.Columns.Add(new DataGridTextColumn(){ Header="Name", Binding=new Binding("Name")});
我定义了myDataGrid:
<DataGrid Name="myDataGrid" ItemsSource="{Binding Products}" />
在我的viewmodel中,我创建了一个
var products = new List<Product>
{
new Product
{
Name="Prod 1",
Price="12.5"
}
}
var prices = new List<PriceL>
{
new PriceL
{
Price="12.5"
},
new PriceL
{
Price="10"
}
}
ICollectionView Products = CollectionViewSource.GetDefaultView(products);
ICollectionView Prices = CollectionViewSource.GetDefaultView(prices);
我需要当“价格”为空时,列变为文本框我正在使用MVVM,我尝试使用elementStyle,但我看不到Combobox中的任何事件让我验证它的数据源。任何人都可以帮助我吗?
答案 0 :(得分:1)
我刚刚找到了一种方法
<UserControl.Resources>
<DataGrid ItemsSource={binding} x:Key="DataGrid1">
<DataGrid.Columns>
<DataGridTextColumn Binding="{ID}"/>
<DataGridTextColumn Binding="{Name}"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource={binding} x:Key="DataGrid2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{ID}"/>
<DataGridCheckBoxColumn Binding="{Accepted}"/>
</DataGrid.Columns>
</DataGrid>
</UserControl.Resources>
<Grid>
<ContentControl Content="{StaticResource DataGrid1}" DataContext="{Binding MyTable}" Name="myContent"/}
</Grid>
Y por codigo puede cambiar el content
myContent.Content = this.FindResource(“DataGrid 2”);
答案 1 :(得分:0)
您是否考虑过触发所需视觉变化的行为,例如DataStateBehavior?您可能希望在VM中放入一个布尔属性,该属性检测源是否有效,该行为可以触发。