Search arrays for values
You're doing a good job at indenting your code, well done! But then why would you need these?


            }   // end if
        }   // end foreach(s)
    }   // end foreach(t)
}   // end foreach(r)



Now, the signature:


private static void GetResults(ref ObservableCollection&lt;string&gt; resultTitles, ref string[] query, ref ObservableCollection&lt;int&gt; weight)



"void GetResults"... "void Get". And then the two ref parameters...


  and passes the query and two empty ObservableCollections to this function.


query doesn't need to be passed by reference, doesn't need to be specifically an array, and if I had to use ref parameters I'd put it first in the signature:

private static void GetResults(IEnumerable&lt;string&gt; query, ref ObservableCollection&lt;string&gt; resultTitles, ref ObservableCollection&lt;int&gt; weight)


Now, the method doesn't care that our collections are observable - it only needs to know it's some kind of ICollection&lt;T&gt;... but there's a smell there nonetheless: passing ref parameters instead of returning a collection, doesn't feel quite natural.

I believe, because it's a private method, that whatever you're passing in as weight could be promoted to a private field if it's used anywhere else in the class, or moved to the GetResults scope where it's used.