I have made a User Control, FontSelector, that groups together a ComboBox for FontFamily Selection and three ToggleButtons for Bold, Italics, Underline options. I am having an issue with the ComboBox's SelectedItem property affecting all instances of that User Control within the same Window. For example, changing the ComboBox selection on one, will automatically change the other. For Clarity. I don't want this behavior. I am very surprised that a User Control is implicitly affecting another User Control.
XAML
<Grid x:Name="Grid" Background="White" DataContext="{Binding RelativeSource={RelativeSource AncestorType=local:FontSelector}}">        
    <ComboBox x:Name="comboBox" Width="135"
              SelectedItem="{Binding Path=SelectedFontFamily}" Style="{StaticResource FontChooserComboBoxStyle}"
                              ItemsSource="{Binding Source={StaticResource SystemFontFamilies}}"/>
</Grid>
Code Behind
The CLR Property that the ComboBox's SelectedItem is Bound to. Code shown here is in the User Control Code Behind File, not a ViewModel.
        private FontFamily _SelectedFontFamily;
    public FontFamily SelectedFontFamily
    {
        get
        {
            return _SelectedFontFamily;
        }
        set
        {
            if (_SelectedFontFamily != value)
            {
                _SelectedFontFamily = value;
                // Modify External Dependency Property Value.
                if (value != SelectedFont.FontFamily)
                {
                    SelectedFont = new Typeface(value, GetStyle(), GetWeight(), FontStretches.Normal);
                }
                // Notify.
                RaisePropertyChanged(nameof(SelectedFontFamily));
            }
        }
    }
The Dependency Property that updates it's value based on the Value of the ComboBox's SelectedItem Property. It effectively packages the FontFamily value into a Typeface Object.
public Typeface SelectedFont
    {
        get { return (Typeface)GetValue(SelectedFontProperty); }
        set { SetValue(SelectedFontProperty, value); }
    }
    // Using a DependencyProperty as the backing store for SelectedFont.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SelectedFontProperty =
        DependencyProperty.Register("SelectedFont", typeof(Typeface), typeof(FontSelector),
            new FrameworkPropertyMetadata(new Typeface("Arial"), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
                new PropertyChangedCallback(OnSelectedFontPropertyChanged)));
    private static void OnSelectedFontPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var instance = d as FontSelector;
        var newFont = e.NewValue as Typeface;
        if (newFont != null)
        {
            instance.SelectedFontFamily = newFont.FontFamily;
        }
    }
EDIT
I think I may have figured out what is going on. I can replicate it by Binding the ItemsSource to the Following Collection View Source.
<CollectionViewSource  x:Key="SystemFontFamilies" Source="{Binding Source={x:Static Fonts.SystemFontFamilies}}">
        <CollectionViewSource.SortDescriptions>
             <scm:SortDescription PropertyName="Source"/>
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
You can then replicate the behavior by placing 2 ComboBoxes and Binding both of them to the CollectionViewSource. They will now, seemingly implicitly track each others SelectedItem. Even without Any Data Binding outside of ItemsSource. It would seem that the CollectionViewSource is somehow playing a part in what the SelectedItem is.
SelectedFontFamilyproperty in you ViewModel? May be when one UC updates it, the property updates other UC's. - Nikhil Agrawal