EDIT (Klärung der Anforderungen)Stil Datagridtemplatecolumn DataGridComboBoxColumn
ich einen DataGrid
wie unten gezeigt haben übereinstimmen. Die Werte in der Spalte "Feldname zum Speichern der alten EmpNo" ändern sich basierend auf dem in der Spalte "Neue EmpNo-Regel" ausgewählten Wert. Um dies zu ermöglichen, hat jeder Artikel in der DataGrid
ItemsSource
seine eigene . Ich muss an diese binden und nicht eine statische Eigenschaft, die sich nicht ändern kann.
Wenn es eine Möglichkeit gibt, diese Bindung während der Verwendung von DataGridComboBoxTemplate
zu tun, würde ich das bevorzugen. Wenn nicht, würde ich gerne wissen, ob es möglich ist, die DataGridTemplateColumn
/ComboBox
auf Vorlage, die der OP DataGridComboBoxTemplate
passen
ich ein Szenario, wo ich DataGridComboBoxColumn
für eine der DataGrid
Spalten verwende . In einer anderen Spalte muss ich die DataGridTemplateColumn
mit einer ComboBox
verwenden, um ordnungsgemäß an eine dynamische ItemSource in der VM zu binden.
Das DataGridComboBoxColumn
("New EmpNo Rule") ist gestylt anders als die DataGridTemplateColumn
mit einem ComboBox
("Feldnamen zu speichern Alt EmpNo") wie hier gezeigt:
Wie kann ich Stil die DataGridTemplateColumn
/ComboBox
mit der DataGridComboBoxColumn
, insbesondere, wie die Combobox ausgeblendet wird, wenn die tatsächliche Zelle nicht ausgewählt ist (wie die zweite Zeile von "New EmpNo Rule").
EDIT (hinzugefügt DataGrid
Code):
public class BindingProxy : Freezable
{
#region Overrides of Freezable
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
#endregion
public object Data
{
get { return (object)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
// Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
}
XAML-Ressourcen:
<UserControl.Resources>
<ResourceDictionary>
<CollectionViewSource x:Key="StaticEmpNoRuleCollection" Source="{Binding EmpNoRuleCollection}" />
</ResourceDictionary>
</UserControl.Resources>
....
<DataGrid Name="DataGrid_MultiCompanyInfo"
ItemsSource="{Binding Model.EmpNoOptionsCollection}"
SelectedItem="{Binding SelectedEmpNoOptions}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False">
<DataGrid.Columns>
<!-- Company -->
<DataGridTextColumn Header="Company"
Binding="{Binding Company}"
IsReadOnly="True" />
<!-- New EmpNo Rule -->
<DataGridComboBoxColumn Header="New EmpNo Rule"
Width="200"
ItemsSource="{Binding Source={StaticResource StaticEmpNoRuleCollection}}"
DisplayMemberPath="Description"
SelectedValueBinding="{Binding SelectedEmpNoRule, UpdateSourceTrigger=PropertyChanged}"/>
<!-- Field Name To Store Old EmpNo -->
<DataGridTemplateColumn Header="Field Name To
Store Old EmpNo"
Width="150" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="OldEmpNo_ComboBox"
Margin="-5,0,0,0"
ItemsSource="{Binding TableNameForOldDataCollection}"
SelectedValue="{Binding TableNameForOldData, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid.Columns>
</DataGrid>
Könnten Sie bitte Ihren DataGridTemplateColumn Code veröffentlichen? – Jose
@Kirenenko Siehe bearbeiten zu OP. – BrianKE
Ich denke, dass der richtige Weg ist, DataGridComboBoxColumn auf "Old EmpNo" zu verwenden, aber Sie sollten korrekt binden, mit 'RelativeSource =" {RelativeSource AncestorType = {x: Type DataGrid}} ". – Jose