Мне нужно привязать один DataColumn к объекту, представляющему SeletectedItem из ComboBox, который находится внутри DataGridTemplateColumn. Я попробовал почти все, но мне удалось привязать только к колонке с колонтитулом.Привязать к DataGridTemplateColumn, содержащему ComboBox
XAML выглядит следующим образом:
<DataGrid.Columns>
<DataGridTemplateColumn x:Name="MealPartsColumn" Header="Składniki">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="MealPartsComboBox" ItemsSource="{Binding MealParts}" SelectedIndex="0" SelectedValuePath="{Binding FoodQuantity}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=FoodProduct.ProductName}" Width="100"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding ElementName=MealPartsComboBox, Path=SeletectedItem.FoodQuantity}" ClipboardContentBinding="{x:Null}" Header="Ilość w gramach" Width="100"/>
</DataGrid.Columns>
Моя модель, описывающая это:
public class Meal
{
public List<MealPart> MealParts { get;set; }
}
public class MealParts
{
public float FoodQuantity {get;set;}
public FoodProduct FoodProduct {get;set;}
}
public class FoodProduct
{
public string ProductName {get;set;}
}
Соответствующий код бэкенд:
Meals = new ObservableCollection<Meal>(mealsForDay);
HistoryDataGrid.ItemsSource = Meals;
ProductName в ComboBox заполняемых правильно, однако , Я не могу привязать его к TextColumn.
Это код, который я сделал, который, наконец, работает. Мне нужно было установить явно UpdateSourceTrigger, чтобы это решение работало.
<DataGridTemplateColumn x:Name="MealPartsColumn" Header="Składniki">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="MealPartsComboBox" DisplayMemberPath="FoodProduct.ProductName" ItemsSource="{Binding MealParts}" SelectedItem="{Binding SelectedMealPart, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Ilość w gramach" Binding="{Binding SelectedMealPart.FoodQuantity, UpdateSourceTrigger=PropertyChanged}" />
Я думаю, что некоторые из ваших проблем может исходить из того, что вы связываете по имени элемента, когда этот элемент существует в каждой строке в сетка. У меня будет время утром, чтобы копать дальше, если у вас нет ответа к тому времени. – Mike