Wpf 将objectinstance设置为当前数据项
我是WPF的新手,几天来一直在努力寻找答案,但运气不好,似乎应该有办法。我已经设置了一个DataTemplate,其数据类型是我的自定义类。在DataTemplate定义中,我使用设置了一个资源集合。我这样做是因为我想创建一个ObjectDataProvider,它将可用于DataTemplate中的控件-我想将此ObjectDataProvider的ObjectInstance当前绑定到列表中的当前实例的数据项,当用户更改作为DataTemplate一部分的文本框中的文本时,我希望能够在当前数据实例上运行方法。很难解释,但这应该更清楚,这是我的xaml:Wpf 将objectinstance设置为当前数据项,wpf,datatemplate,datacontext,Wpf,Datatemplate,Datacontext,我是WPF的新手,几天来一直在努力寻找答案,但运气不好,似乎应该有办法。我已经设置了一个DataTemplate,其数据类型是我的自定义类。在DataTemplate定义中,我使用设置了一个资源集合。我这样做是因为我想创建一个ObjectDataProvider,它将可用于DataTemplate中的控件-我想将此ObjectDataProvider的ObjectInstance当前绑定到列表中的当前实例的数据项,当用户更改作为DataTemplate一部分的文本框中的文本时,我希望能够在当前数
<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>
您对您的代码背后有正确的想法-它必须尽可能小。这是MVVM模式的口号之一,这就是你需要的——学习MVVM。互联网有很多资源,所以找到它不是一个问题
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;
}