Veri ve Veri Nesneleri

Sürükle ve bırak işlemi kapsamında aktarılan veriler bir veri nesnesinde depolanır. Kavramsal olarak, bir veri nesnesi aşağıdaki çiftlerden bir veya daha fazladan oluşur:

  • Gerçek Object verileri içeren bir.

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

Verilerin kendisi, temel olarak temsil edilen her şeyden Object oluşur. Karşılık gelen veri biçimi bir dizedir Type veya 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çime veri sağlamalarını sağlar.

Veri Nesneleri

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

Yöntem Özet
GetData Belirtilen veri biçimindeki bir veri nesnesini alan.
GetDataPresent Verilerin belirtilen biçimde kullanılabilir olup olmadığını veya bu biçime dönüştürülenin gerekip gerek olmadığını denetler.
GetFormats Bu veri nesnesinde depolanan veya dönüştürülen biçimlerin listesini döndürür.
SetData Belirtilen verileri bu veri nesnesinde depolar.

WPF sınıfında temel IDataObject bir uygulaması DataObject sağlar. Stock 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ış çeşitli biçimler vardır. WPF ile sağlanan önceden tanımlanmış veri biçimleri hakkında bilgi için sınıf başvurusu DataFormats konu başlığına bakın.

Veri nesneleri genellikle verileri ayıklarken bir biçimde depolanan verileri farklı bir biçime otomatik olarak dönüştürmek için bir tesis içerir; Bu tesis otomatik dönüştürme olarak adlandırılır. Bir veri nesnesinde kullanılabilen veri biçimleri sorgularken, veya yöntemi çağrılarak ve parametresi olarak belirterek otomatik olarak dönüştürülebilir veri biçimleri yerel veri GetFormats(Boolean)GetDataPresent(String, Boolean)autoConvert biçimlerinden filtrelenmiş false olabilir. yöntemiyle bir veri nesnesine veri eklerken, parametresi olarak ayarlanmadan verilerin SetData(String, Object, Boolean) otomatik olarak dönüştürmesi autoConvert yasaklandırabilirsiniz. false

Veri Nesneleriyle Çalışma

Bu bölümde veri nesneleri oluşturmak ve bu nesnelerle çalışmak için yaygın teknikler açık yapılmaktadır.

Yeni Veri Nesneleri Oluşturma

sınıfı, DataObject yeni bir örneği tek bir veri/veri biçimi çifti ile doldurmak DataObject için 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 bir veri biçimiyle başlatmak için aşırı yüklenmiş oluşturuculardan DataObject birini ( DataObject(String, Object) ) kullanır. Bu durumda, veri biçimi bir dize tarafından belirtilir; sınıfı, DataFormats önceden tanımlanmış tür dizeleri kümesi sağlar. Depolanan verilerin otomatik olarak dönüştürmesine 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 koda daha fazla örnek için bkz. Veri Nesnesi Oluşturma.

Verileri Birden Çok Biçimde Depolama

Tek bir veri nesnesi, verileri birden çok biçime depolar. Tek bir veri nesnesi içinde birden çok veri biçiminin stratejik olarak kullanımı, veri nesnesinin yalnızca tek bir veri biçiminin temsil edilene kadar daha geniş bir bırakma hedefi tarafından tüketilebilir hale düşmesine neden olur. Genel olarak, sürükle kaynağının olası bırakma hedefleri tarafından tüketilebilir veri biçimleri hakkında bağımsız olması gerektiğini unutmayın.

Aşağıdaki örnekte, bir veri nesnesine SetData(String, Object) birden çok biçime veri eklemek için yönteminin nasıl olduğu gösterir.

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 Nesnesini Sorgulama

Tek bir veri nesnesi rastgele sayıda veri biçimi içereye sahip olduğundan, veri nesneleri kullanılabilir veri biçimlerinin listesini almak için özellikler içerir.

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

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 sorgulatan koda daha fazla örnek için bkz. Bir Veri Nesnesinde Veri Biçimlerini Listele. Belirli bir veri biçiminin varlığı için bir veri nesnesini sorgulama örnekleri için bkz. Veri Nesnesinde Veri Biçiminin Mevcut Olup Olmadığını Belirleme.

Veri Nesnesinden Veri Alma

Bir veri nesnesinden belirli bir biçimde veri almak için yöntemlerden birini çağırma ve istenen veri GetData biçimini belirtme gerekir. Yöntemlerden GetDataPresent biri, belirli bir veri biçiminin varlığını denetlemeye kullanılabilir. GetData , verileri bir içinde Object döndürür; veri biçimine bağlı olarak, bu nesne türe özgü bir kapsayıcıya at kullanılabilir.

Aşağıdaki örnek kod, belirtilen bir veri biçiminin (yerel veya otomatik dönüştürme ile) kullanılabilir olup olduğunu kontrol etmek GetDataPresent(String) için aşırı yükleme kullanır. Belirtilen biçim kullanılabilirse, örnek yöntemini kullanarak verileri GetData(String) almaktadı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

Bir veri nesnesinden veri alan koda daha fazla örnek için bkz. Belirli bir Veri Biçiminde Veri Alma.

Veri Nesnesinden Veri Kaldırma

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

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

  2. İstenen verileri eski veri nesnesinden yeni veri nesnesine "kopyalayın". Verileri kopyalamak için, ham verileri içeren bir almak için yöntemlerinden birini kullanın ve ardından yöntemlerden birini kullanarak verileri yeni GetDataObject veri SetData nesnesine ekleyin.

  3. Eski veri nesnesini yeni veri nesnesiyle değiştirin.

Not

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