Я довольно новичок в WPF, уже пару дней безуспешно работаю над поиском ответа на этот вопрос, похоже, должен быть выход.Я установил DataTemplate, DataType которого является моим собственным классом.В рамках определения DataTemplate я настроил сбор ресурсов с помощью.Я сделал это потому, что хочу создать ObjectDataProvider, который будет доступен элементам управления в DataTemplate - я хочу, чтобы ObjectInstance этого ObjectDataProvider был в настоящее время связанным элементом данных (текущим экземпляром в списке моего пользовательского класса) - потому чтотогда я хочу иметь возможность запускать метод для текущего экземпляра данных - когда пользователь изменяет текст в текстовом поле, которое является частью DataTemplate.Трудно объяснить, но это должно прояснить ситуацию, вот мой xaml:
<DataTemplate x:Key="TierDisplay" DataType="{x:Type tiers:PopulatedTier}">
<DataTemplate.Resources>
<ObjectDataProvider x:Key="FilteredItems" MethodName="GetDisplayItems">
<ObjectDataProvider.MethodParameters>
<sys:Int32>0</sys:Int32>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</DataTemplate.Resources>
<StackPanel Orientation="Vertical">
<TextBox Name="txtMaxSupplyDays" LostFocus="txtMaxSupplyDays_LostFocus"></TextBox>
<DataGrid ItemsSource="{Binding Source={StaticResource FilteredItems}}" />
</StackPanel>
</DataTemplate>
Каждый экземпляр DataTemplate связан с экземпляром класса PopulatedTier.Когда пользователь покидает текстовое поле txtMaxSupplyDays, у меня есть код в выделенном коде, чтобы взять введенное им значение и поместить его в первый MethodParameter моего ObjectDataProvider (ключ которого - FilteredItems).Это отлично работает с использованием кода C # ниже, код находит FilteredItems и вставляет нужное значение в MethodParameter.Но я не могу понять, как связать FilteredItems с текущим экземпляром PopulatedTier, чтобы его GetDisplayItems работал.(Если бы это работало, то, вероятно, DataGrid обновился бы, используя вывод GetDisplayItems в качестве своего ItemsSource.) Фактически, в C # ниже он находит / распознает свойство DataContext текстового поля (отправителя) как экземпляр PopulatedTier.Но как я могу сослаться на это в XAML в определении ObjectDataProvider?СПАСИБО и дайте мне знать, если я могу уточнить дальше.Конечно, приветствуются альтернативные предложения;Я хотел бы сохранить как можно больше в XAML и коде позади.
private void txtMaxSupplyDays_LostFocus(object sender, RoutedEventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
int value;
bool valueOK = Int32.TryParse(textBox.Text, out value);
if (valueOK)
((ObjectDataProvider)textBox.FindResource("FilteredItems")).MethodParameters[0] = value;
}