Aracılığıyla paylaş


Veri ve Veri Nesneleri

Sürükle ve bırak işleminin bir parçası olarak aktarılan veriler bir veri nesnesinde depolanır. Kavramsal olarak, bir veri nesnesi aşağıdaki çiftlerden birini veya daha fazlasını içerir:

  • Object Gerçek verileri içeren bir.

  • Karşılık gelen veri biçimi tanımlayıcısı.

Verilerin kendisi, temel Objectolarak temsil edilebilecek herhangi bir şeyden oluşabilir. Karşılık gelen veri biçimi bir dizedir veya Type verilerin hangi biçimde olduğu hakkında ipucu sağlar. Veri nesneleri birden çok veri/veri biçimi çifti barındırmayı destekler; bu, tek bir veri nesnesinin birden çok biçimde veri sağlamasına olanak tanır.

Veri Nesneleri

Tüm veri nesneleri, veri aktarımını IDataObject etkinleştiren ve kolaylaştıran aşağıdaki standart yöntem kümesini sağlayan arabirimini uygulamalıdır.

Yöntem Özet
GetData Belirtilen veri biçiminde bir veri nesnesi alır.
GetDataPresent Verilerin belirtilen biçimde kullanılabilir veya dönüştürülebilir olup olmadığını denetler.
GetFormats Bu veri nesnesindeki verilerin depolandığı veya dönüştürülebileceği biçimlerin listesini döndürür.
SetData Belirtilen verileri bu veri nesnesinde depolar.

WPF, sınıfında temel bir uygulamasını IDataObjectDataObject sağlar. Stok DataObject sınıfı birçok yaygın veri aktarımı senaryosu için yeterlidir.

Bit eşlem, CSV, dosya, HTML, RTF, dize, metin ve ses gibi önceden tanımlanmış birkaç biçim vardır. WPF ile sağlanan önceden tanımlanmış veri biçimleri hakkında bilgi için sınıf başvurusu konusuna DataFormats bakın.

Veri nesneleri genellikle verileri ayıklarken tek bir biçimde depolanan verileri otomatik olarak farklı bir biçime dönüştürmek için bir özellik içerir; bu tesis otomatik dönüştürme olarak adlandırılır. Bir veri nesnesinde kullanılabilen veri biçimleri sorgulanırken, veya yöntemi çağrılarak GetFormats(Boolean)GetDataPresent(String, Boolean) ve parametresi olarak falsebelirtilerek autoConvert otomatik dönüştürülebilir veri biçimleri yerel veri biçimlerinden filtrelenebilir. yöntemiyle SetData(String, Object, Boolean) bir veri nesnesine veri eklerken, parametresi falseolarak ayarlanarak autoConvert verilerin otomatik olarak dönüştürülmesi yasaklanabilir.

Veri Nesneleri ile Çalışma

Bu bölümde, veri nesneleri oluşturmaya ve bunlarla çalışmaya yönelik yaygın teknikler açıklanmaktadır.

Yeni Veri Nesneleri Oluşturma

sınıfı, DataObject tek bir veri/veri biçimi çifti ile yeni DataObject bir örneği doldurmayı kolaylaştıran birkaç aşırı yüklenmiş oluşturucu sağlar.

Aşağıdaki örnek kod yeni bir veri nesnesi oluşturur ve veri nesnesini bir dize ve belirtilen veri biçimiyle başlatmak için aşırı yüklenmiş oluşturuculardan DataObject(DataObject(String, Object)) birini kullanır. Bu durumda, veri biçimi bir dize tarafından belirtilir; DataFormats sınıfı, önceden tanımlanmış tür dizeleri kümesi sağlar. Depolanan verilerin otomatik olarak dönüştürülmesi varsayılan olarak izin verilir.

string stringData = "Some string data to store...";
string dataFormat = DataFormats.UnicodeText;
DataObject dataObject = new DataObject(dataFormat, stringData);
Dim stringData As String = "Some string data to store..."
Dim dataFormat As String = DataFormats.UnicodeText
Dim dataObject As New DataObject(dataFormat, stringData)

Veri nesnesi oluşturan kod örnekleri için bkz . Veri Nesnesi Oluşturma.

Verileri Birden Çok Biçimde Depolama

Tek bir veri nesnesi, verileri birden çok biçimde depolar. Tek bir veri nesnesi içinde birden çok veri biçiminin stratejik kullanımı, veri nesnesinin yalnızca tek bir veri biçiminin temsil edilebileceğinden daha geniş bir bırakma hedefi tarafından kullanılabilmesini sağlar. Genel olarak, bir sürükleme kaynağının olası bırakma hedefleri tarafından kullanılabilen veri biçimleri hakkında belirsiz olması gerektiğini unutmayın.

Aşağıdaki örnekte, bir veri nesnesine birden çok biçimde veri eklemek için yönteminin nasıl kullanılacağı SetData(String, Object) gösterilmektedir.

DataObject dataObject = new DataObject();
string sourceData = "Some string data to store...";

// Encode the source string into Unicode byte arrays.
byte[] unicodeText = Encoding.Unicode.GetBytes(sourceData); // UTF-16
byte[] utf8Text = Encoding.UTF8.GetBytes(sourceData);
byte[] utf32Text = Encoding.UTF32.GetBytes(sourceData);

// The DataFormats class does not provide data format fields for denoting
// UTF-32 and UTF-8, which are seldom used in practice; the following strings
// will be used to identify these "custom" data formats.
string utf32DataFormat = "UTF-32";
string utf8DataFormat  = "UTF-8";

// Store the text in the data object, letting the data object choose
// the data format (which will be DataFormats.Text in this case).
dataObject.SetData(sourceData);
// Store the Unicode text in the data object.  Text data can be automatically
// converted to Unicode (UTF-16 / UCS-2) format on extraction from the data object;
// Therefore, explicitly converting the source text to Unicode is generally unnecessary, and
// is done here as an exercise only.
dataObject.SetData(DataFormats.UnicodeText, unicodeText);
// Store the UTF-8 text in the data object...
dataObject.SetData(utf8DataFormat, utf8Text);
// Store the UTF-32 text in the data object...
dataObject.SetData(utf32DataFormat, utf32Text);
Dim dataObject As New DataObject()
Dim sourceData As String = "Some string data to store..."

' Encode the source string into Unicode byte arrays.
Dim unicodeText() As Byte = Encoding.Unicode.GetBytes(sourceData) ' UTF-16
Dim utf8Text() As Byte = Encoding.UTF8.GetBytes(sourceData)
Dim utf32Text() As Byte = Encoding.UTF32.GetBytes(sourceData)

' The DataFormats class does not provide data format fields for denoting
' UTF-32 and UTF-8, which are seldom used in practice; the following strings 
' will be used to identify these "custom" data formats.
Dim utf32DataFormat As String = "UTF-32"
Dim utf8DataFormat As String = "UTF-8"

' Store the text in the data object, letting the data object choose
' the data format (which will be DataFormats.Text in this case).
dataObject.SetData(sourceData)
' Store the Unicode text in the data object.  Text data can be automatically
' converted to Unicode (UTF-16 / UCS-2) format on extraction from the data object; 
' Therefore, explicitly converting the source text to Unicode is generally unnecessary, and
' is done here as an exercise only.
dataObject.SetData(DataFormats.UnicodeText, unicodeText)
' Store the UTF-8 text in the data object...
dataObject.SetData(utf8DataFormat, utf8Text)
' Store the UTF-32 text in the data object...
dataObject.SetData(utf32DataFormat, utf32Text)

Kullanılabilir Biçimler için Veri Nesnesi Sorgulama

Tek bir veri nesnesi rastgele sayıda veri biçimi içerebileceğinden, veri nesneleri kullanılabilir veri biçimlerinin listesini almaya yönelik olanaklar içerir.

Aşağıdaki örnek kod, bir veri nesnesinde kullanılabilen tüm veri biçimlerini belirten bir dizi dize (hem yerel hem de otomatik dönüştürme yoluyla) almak için aşırı yüklemeyi kullanır GetFormats .

DataObject dataObject = new DataObject("Some string data to store...");

// Get an array of strings, each string denoting a data format
// that is available in the data object.  This overload of GetDataFormats
// returns all available data formats, native and auto-convertible.
string[] dataFormats = dataObject.GetFormats();

// Get the number of data formats present in the data object, including both
// auto-convertible and native data formats.
int numberOfDataFormats = dataFormats.Length;

// To enumerate the resulting array of data formats, and take some action when
// a particular data format is found, use a code structure similar to the following.
foreach (string dataFormat in dataFormats)
{
    if (dataFormat == DataFormats.Text)
    {
        // Take some action if/when data in the Text data format is found.
        break;
    }
    else if(dataFormat == DataFormats.StringFormat)
    {
        // Take some action if/when data in the string data format is found.
        break;
    }
}
Dim dataObject As New DataObject("Some string data to store...")

' Get an array of strings, each string denoting a data format
' that is available in the data object.  This overload of GetDataFormats
' returns all available data formats, native and auto-convertible.
Dim dataFormats() As String = dataObject.GetFormats()

' Get the number of data formats present in the data object, including both
' auto-convertible and native data formats.
Dim numberOfDataFormats As Integer = dataFormats.Length

' To enumerate the resulting array of data formats, and take some action when
' a particular data format is found, use a code structure similar to the following.
For Each dataFormat As String In dataFormats
    If dataFormat = System.Windows.DataFormats.Text Then
        ' Take some action if/when data in the Text data format is found.
        Exit For
    ElseIf dataFormat = System.Windows.DataFormats.StringFormat Then
        ' Take some action if/when data in the string data format is found.
        Exit For
    End If
Next dataFormat

Kullanılabilir veri biçimleri için bir veri nesnesini sorgulayan kod örnekleri için bkz . Veri Nesnesinde Veri Biçimlerini Listeleme. Belirli bir veri biçiminin varlığı için bir veri nesnesini sorgulama örnekleri için bkz . Veri Nesnesinde Veri Biçimi Olup Olmadığını Belirleme.

Veri Nesnesinden Veri Alma

Belirli bir biçimdeki bir veri nesnesinden veri almak için yöntemlerden birinin GetData çağrılması ve istenen veri biçiminin belirtilmesi gerekir. Yöntemlerden GetDataPresent biri, belirli bir veri biçiminin varlığını denetlemek için kullanılabilir. GetData , içindeki verileri Objectdöndürür; veri biçimine bağlı olarak, bu nesne türe özgü bir kapsayıcıya yayınlanabilir.

Aşağıdaki örnek kod, belirtilen veri biçiminin GetDataPresent(String) kullanılabilir olup olmadığını (yerel veya otomatik dönüştürme yoluyla) denetlemek için aşırı yüklemeyi kullanır. Belirtilen biçim kullanılabilir durumdaysa, örnek yöntemini kullanarak GetData(String) verileri alır.

DataObject dataObject = new DataObject("Some string data to store...");

string desiredFormat = DataFormats.UnicodeText;
byte[] data = null;

// Use the GetDataPresent method to check for the presence of a desired data format.
// This particular overload of GetDataPresent looks for both native and auto-convertible
// data formats.
if (dataObject.GetDataPresent(desiredFormat))
{
    // If the desired data format is present, use one of the GetData methods to retrieve the
    // data from the data object.
    data = dataObject.GetData(desiredFormat) as byte[];
}
Dim dataObject As New DataObject("Some string data to store...")

Dim desiredFormat As String = DataFormats.UnicodeText
Dim data() As Byte = Nothing

' Use the GetDataPresent method to check for the presence of a desired data format.
' This particular overload of GetDataPresent looks for both native and auto-convertible 
' data formats.
If dataObject.GetDataPresent(desiredFormat) Then
    ' If the desired data format is present, use one of the GetData methods to retrieve the
    ' data from the data object.
    data = TryCast(dataObject.GetData(desiredFormat), Byte())
End If

Veri nesnesinden veri alan kod örnekleri için bkz . Belirli Bir Veri Biçiminde Veri Alma.

Veri Nesnesinden Veri Kaldırma

Veriler bir veri nesnesinden doğrudan kaldırılamaz. Veri nesnesinden verileri etkili bir şekilde kaldırmak için şu adımları izleyin:

  1. Yalnızca saklamak istediğiniz verileri içerecek yeni bir veri nesnesi oluşturun.

  2. eski veri nesnesinden yeni veri nesnesine istenen verileri "kopyalayın". Verileri kopyalamak için, ham verileri içeren bir Object almak için yöntemlerden birini GetData kullanın ve ardından yeni veri nesnesine veri eklemek için yöntemlerden birini SetData kullanın.

  3. Eski veri nesnesini yenisiyle değiştirin.

Dekont

SetData Yöntemler yalnızca veri nesnesine veri ekler; veri ve veri biçimi önceki bir çağrıyla tam olarak aynı olsa bile verileri değiştirmez. Aynı veri ve veri biçimi için iki kez çağrılması SetData , veri/veri biçiminin veri nesnesinde iki kez mevcut olmasına neden olur.