First off, try the Too Faced Shadow Insurance, which I think is the best mainstream eye primer available. Second, try layering your products. Start with a primer, then a cream product, then a powder. Pat the powder product over the cream to set it, rather than swiping it over it which may disturb it. You can use a cream product in the same shade as the powder shadow, a neutral, more concealer-like shade, or a basic white (which, depending on the opacity of the product used, may either make the shade bolder or a bit more subdued. Layering in almost any area of makeup is key to lasting power (think about foundation: first moisturiser, then primer, then concealer, then foundation, then powder.)
If this doesn’t appeal to you, try applying your powder eyeshadow wet with a mixing medium. I adore Ben Nye LiquiSet. This stuff makes powder eyeshadows virtually smudge-proof and water resistant, amps up the vibrancy, and is cheap cheap cheap. The only problem is is that it sets fast. Like, within seconds. And once it sets, it absolutely cannot be blended. So, if you plan on doing a lot of careful blending, or are a slow makeup applier, I’d pass over this.
Otherwise, you can use a more general makeup sealer, like Ben Nye Final Seal. The only possible problem with this product is that it makes stuff matte, and really matte. If that’s not an issue, this is your product, as it doesn’t set as quickly and is much more blendable, and you’ll still get the smudge-, water-, and fade-proofness of the LiquiSet. This minty blue liquid can also be used a general makeup setter (I use this in photoshoots that have really hot lights or in cases when models or actors will be sweating a lot, and it an absolute godsend.)
In either case, you have two options for application. Either wet your brush before or after you get some pigment onto it (I prefer before, but doing so often leaves a slight film on the eyeshadow left in the pan, which can just be wiped off with a tissue later; this method also has the benefit of making shades more vibrant and making shimmery or metallic shades appear foiled). Otherwise, you can spritz either product on a small duo-fibre brush and stipple over the shadow after dry application (this method is better if you still want to be able to blend and work meticulously, but won’t provide the same setting effect as using it as a mixing medium.)