We saw earlier that you can build the initial contents of a Windows Runtime IVector in a std:: (which is usually far more convenient with better performance), and then convert it to a Windows Runtime IVector as a final step. Or you can create the Windows Runtime IVector from raw materials without having to use an explicit std:: at all.
But what if somebody gave you an existing Windows Runtime IVector, and you want to overwrite its current contents with new content? This happens in many parts of the Windows Runtime, such as the FileÂOpenÂPicker, which gives you a FileÂTypeÂFilter that you can fill with the file types you want to filter for. You can’t provide your own IVector; you have to fill the existing one.
The naïve way would be to clear the vector and then fill it with items, one at a time:
namespace winrt
{
using namespace winrt::Windows::Storage::Pickers;
}
winrt::FileOpenPicker CreatePickerForSupportedImages()
{
winrt::FileOpenPicker picker;
auto filter = picker.FileTypeFilter();
filter.Clear();
filter.Append(L".jpg");
filter.Append(L".png");
filter.Append(L".bmp");
filter.Append(L".gif");
filter.Append(L".tif");
return picker;
}
But there’s a one-stop way of doing this: The ReplaceÂAll method.
winrt::FileOpenPicker CreatePickerForSupportedImages()
{
winrt::FileOpenPicker picker;
auto filter = picker.FileTypeFilter();
filter.ReplaceAll({ L".jpg", L".png", L".bmp", L".gif", L".tif" });
return picker;
}
The ReplaceAll method replaces the entire contents of the vector with the values you provide. You can think of it as a combination Clear and Append, but it all happens at once.
The ReplaceAll method takes a winrt::, so you can pass anything that an array_view can construct from. In this example, we used an initializer_list, but you can look at the other constructors to see all the options you have available.
0 comments