데이터 및 데이터 개체
끌어서 놓기 작업의 일부로 전송되는 데이터는 데이터 개체에 저장됩니다. 개념적으로 데이터 개체는 다음 쌍 하나 이상으로 구성됩니다.
실제 데이터가 포함된 Object
해당 데이터 형식 식별자
데이터 자체는 기본 Object로 나타낼 수 있는 모든 항목으로 구성될 수 있습니다. 해당 데이터 형식은 문자열이거나 데이터의 형식에 대한 힌트를 제공하는 Type입니다. 데이터 개체는 여러 데이터/데이터 형식 쌍 호스팅을 지원합니다. 이를 통해 단일 데이터 개체에서 여러 형식의 데이터를 제공할 수 있습니다.
데이터 개체
모든 데이터 개체는 데이터 전송을 사용하고 용이하게 하는 다음과 같은 표준 메서드 세트를 제공하는 IDataObject 인터페이스를 구현해야 합니다.
방법 | 요약 |
---|---|
GetData | 지정된 데이터 형식의 데이터 개체를 검색합니다. |
GetDataPresent | 지정된 형식의 데이터가 있거나 지정된 형식으로 변환될 수 있는지 확인합니다. |
GetFormats | 이 데이터 개체의 데이터가 저장되거나 변환될 수 있는 형식 목록을 반환합니다. |
SetData | 이 데이터 개체에 지정된 데이터를 저장합니다. |
WPF에서는 DataObject 클래스의 IDataObject 기본 구현을 제공합니다. 주식 DataObject 클래스는 많은 일반적인 데이터 전송 시나리오에 충분합니다.
비트맵, CSV, 파일, HTML, RTF, 문자열, 텍스트 및 오디오와 같은 몇 가지 미리 정의된 형식이 있습니다. WPF와 함께 제공되는 미리 정의된 데이터 형식에 대한 자세한 내용은 DataFormats 클래스 토픽 항목을 참조하세요.
데이터 개체에는 일반적으로 데이터를 추출하는 동안 한 형식으로 저장된 데이터를 다른 형식으로 자동 변환하는 기능이 포함되며 이 기능을 자동 변환이라고 합니다. 데이터 개체에서 사용할 수 있는 데이터 형식을 쿼리할 때 GetFormats(Boolean) 또는 GetDataPresent(String, Boolean) 메서드를 호출하고 autoConvert
매개 변수를 false
로 지정하여 자동 변환 가능한 데이터 형식을 네이티브 데이터 형식에서 필터링할 수 있습니다. SetData(String, Object, Boolean) 메서드를 사용하여 데이터를 데이터 개체에 추가할 때 autoConvert
매개 변수를 false
로 설정하면 데이터의 자동 변환을 금지할 수 있습니다.
데이터 개체 사용
이 섹션에서는 데이터 개체를 만들고 작업할 수 있는 일반적인 기술을 설명합니다.
새 데이터 개체 만들기
DataObject 클래스에서는 단일 데이터/데이터 형식 쌍으로 새 DataObject 인스턴스를 쉽게 채우는 여러 가지 오버로드된 생성자를 제공합니다.
다음 예제 코드는 새 데이터 개체를 만들고 오버로드된 생성자 DataObject(DataObject(String, Object)) 중 하나를 사용하여 문자열과 지정된 데이터 형식이 있는 데이터 개체를 초기화합니다. 이 경우 데이터 형식은 문자열로 지정됩니다. DataFormats 클래스에서는 미리 정의된 형식 문자열 세트를 제공합니다. 기본적으로 저장된 데이터 자동 변환이 허용됩니다.
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)
데이터 개체를 만드는 코드의 더 많은 예는 데이터 개체 만들기를 참조하세요.
여러 형식으로 데이터 저장
단일 데이터 개체는 데이터를 여러 형식으로 저장할 수 있습니다. 단일 데이터 개체 내에서 여러 데이터 형식을 전략적으로 사용하면 단일 데이터 형식만 나타낼 수 있는 경우보다 더 다양한 놓기 대상에서 데이터 개체를 사용할 수 있습니다. 일반적으로 끌기 원본은 잠재적인 놓기 대상에서 사용할 수 있는 데이터 형식에 대해 독립적이어야 합니다.
다음 예제에서는 SetData(String, Object) 메서드를 사용하여 데이터를 여러 형식으로 데이터 개체에 추가하는 방법을 보여줍니다.
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)
사용 가능한 형식에 대한 데이터 개체 쿼리
단일 데이터 개체에는 임의의 데이터 형식 수가 포함될 수 있으므로 데이터 개체에는 사용 가능한 데이터 형식 목록을 검색할 수 있는 기능이 포함됩니다.
다음 예제 코드에서는 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
데이터 개체에서 사용 가능한 데이터 형식을 쿼리하는 코드의 더 많은 예는 데이터 개체의 데이터 형식 목록을 참조하세요. 특정 데이터 형식 존재에 대해 데이터 개체를 쿼리하는 예는 데이터 형식이 데이터 개체에 있는지 여부 확인을 참조하세요.
데이터 개체에서 데이터 검색
특정 형식의 데이터 개체에서 데이터를 검색하려면 GetData 메서드 중 하나를 호출하고 원하는 데이터 형식을 지정하기만 하면 됩니다. GetDataPresent 메서드 중 하나를 사용하여 특정 데이터 형식이 있는지 확인할 수 있습니다. GetData는 데이터 형식에 따라 Object의 데이터를 반환하며 이 개체는 형식별 컨테이너로 캐스팅될 수 있습니다.
다음 예제 코드는 GetDataPresent(String) 오버로드를 사용하여 지정된 데이터 형식을 사용할 수 있는지 확인합니다(네이티브 또는 자동 변환). 지정된 형식을 사용할 수 있으면 예에서 GetData(String) 메서드를 사용하여 데이터를 검색합니다.
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
데이터 개체에서 데이터를 검색하는 코드의 더 많은 예는 특정 데이터 형식의 데이터 검색을 참조하세요.
데이터 개체에서 데이터 제거
데이터 개체에서 데이터를 직접 제거할 수 없습니다. 데이터 개체에서 데이터를 효과적으로 제거하려면 다음 단계를 수행합니다.
.NET Desktop feedback