Resx Translation Helper, V.2.0 Remove Files Window
public class Files
{
    public string Value { get; private set; }
    public bool Selected { get; set; }

    public Files(string value, bool selected = false)
    {
        Value = value;
        Selected = selected;
    }
}



Huh? Files? Plural? There's no collection here. Just File is good. And this confirms it.


OpenFiles = new ObservableCollection&lt;Files&gt;();



What does Value represent? Is it a name? Full file path? What is it man?! =;)- 

Seriously though. I've no idea. A better property name is in order.


    var handler = FilesSelected;
    if (handler != null &amp;&amp; !_eventFired)    // only fire once
    {
        _eventFired = true;
        handler(this, selectedFiles);
    }



Potentially useless comment, but I don't suppose it's causing any active harm at the moment. What I'm more concerned about is setting _eventFired to true before the event has actually fired. The chances of it not firing after setting the boolean variable are slim to none, but it's still odd enough that it caught my eye.


    _window.Closed += (s, e) =&gt;
    {
        OnRemoveFiles(new List&lt;string&gt;());
    };



There are so many examples of using one letter variables for lambda expressions out there that I don't blame you. I don't. We all do it, and often we shouldn't. I think this is one of those times. Sure, I think I know what these stand for, but am I certain? No. Either way, I had to think about it longer than I should have.


public interface IDisplayOpenFiles
{
    object DataContext { set; }

    event EventHandler Closed;

    void Show();
    void Close();
}



I'm always a bit wary of "set only" properties. I would take a moment to consider why you're doing this and if there's a better way. If you've done that, and decided that this is good, leave a comment explaining why it's good.

I feel like that was just a whole bunch of nitpicking though. It seems to me that you've really improved as a developer over the last few months.