मैं Grid_CellEditEnding का उपयोग करने वाले लीगेसी कोड से बदलाव कर रहा हूं - मैंने कस्टम नियंत्रण का उपयोग करने के लिए ग्रिड को संशोधित किया है:

  <DataGridTemplateColumn x:Name="cellQty" Header="Qty" Width="1.1*">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Resources:NumericTextColumn  Text="{Binding Qty}"  >
                                </Resources:NumericTextColumn>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <Resources:NumericTextColumn  Text="{Binding Qty}"  >
                                </Resources:NumericTextColumn>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>

और एक बार सेल ईवेंट ट्रिगर होने के बाद मैं ऑब्जेक्ट का मान प्राप्त करने का प्रयास कर रहा हूं लेकिन ऑब्जेक्ट को कास्ट करने में कठिनाई हो रही है (प्रस्तुति फ्रेमवर्क त्रुटियां प्राप्त करना)

 private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
                if(e.Column.Header.ToString().Equals("Qty"))
                { 
                   //this is in error             
                 var newQuantityText = ((NumericTextColumn)e.EditingElement).Text; 
                }

        }
0
Matt 20 पद 2018, 22:22

1 उत्तर

सबसे बढ़िया उत्तर

मैंने DataContext पंक्ति की संपत्ति का उपयोग किया है और संपत्ति प्राप्त करने के लिए वर्ग प्रकार के साथ डाली है। डेटा क्लास के बजाय आपको अपनी क्लास प्रदान करनी होगी जिसमें मात्रा संपत्ति हो।

 private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
            if(e.Column.Header.ToString().Equals("Qty"))
            { 
                 var d = ((Data)e.Row.DataContext).Qty;
            }
    }

अपडेट किया गया उत्तर

ग्रिड पंक्ति में वर्तमान दर्ज डेटा प्राप्त करने के लिए।

private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
            if(e.Column.Header.ToString().Equals("Qty"))
            { 
                 var NumericDataCtrl= GetVisualChild<NumericTextColumn>(e.EditingElement);
                    var data  = NumericDataCtrl.Text;
            }
    }

एडिटिंग एलीमेंट के अंदर चाइल्ड कंट्रोल को एक्सेस करने के लिए, मैंने नीचे दिए गए तरीके का इस्तेमाल किया:

public static T GetVisualChild<T>(Visual parent) where T : Visual

    {

        T child = default(T);

        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);

        for (int i = 0; i < numVisuals; i++)

        {

            Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);

            child = v as T;

            if (child == null)

            {

                child = GetVisualChild<T>

                (v);

            }

            if (child != null)

            {

                break;

            }

        }

        return child;

    }
1
Sats 20 पद 2018, 20:27