Wpf 将objectinstance设置为当前数据项

Wpf 将objectinstance设置为当前数据项,wpf,datatemplate,datacontext,Wpf,Datatemplate,Datacontext,我是WPF的新手,几天来一直在努力寻找答案,但运气不好,似乎应该有办法。我已经设置了一个DataTemplate,其数据类型是我的自定义类。在DataTemplate定义中,我使用设置了一个资源集合。我这样做是因为我想创建一个ObjectDataProvider,它将可用于DataTemplate中的控件-我想将此ObjectDataProvider的ObjectInstance当前绑定到列表中的当前实例的数据项,当用户更改作为DataTemplate一部分的文本框中的文本时,我希望能够在当前数

我是WPF的新手,几天来一直在努力寻找答案,但运气不好,似乎应该有办法。我已经设置了一个DataTemplate,其数据类型是我的自定义类。在DataTemplate定义中,我使用设置了一个资源集合。我这样做是因为我想创建一个ObjectDataProvider,它将可用于DataTemplate中的控件-我想将此ObjectDataProvider的ObjectInstance当前绑定到列表中的当前实例的数据项,当用户更改作为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>   

您对您的代码背后有正确的想法-它必须尽可能小。这是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;
    }