マークアップと分離コード

マークアップでは、色の名前を表示するリスト項目 ListBox のほかに、色の名前と色成分を表示するリスト項目 listView と、その色を表示するキャンバス Canvas を用意します。

<!-- exBridgeList.xaml -->
  
  
  
    
      
        <GridViewColumn Header="Color Name" 
          DisplayMemberBinding="{Binding Path=name}"  ... />
        <GridViewColumn Header="Red" 
          DisplayMemberBinding="{Binding Path=red}"   ... />
        <GridViewColumn Header="Green" 
          DisplayMemberBinding="{Binding Path=green}" ... />
        <GridViewColumn Header="Blue" 
          DisplayMemberBinding="{Binding Path=blue}"  ... />
      
    
  

マークアップで記述した各コントロール ListBox/Canvas/ListView を、分離コードで参照するときには(プロパティー Name= に続く文字列と同じ名前の)インスタンス属性 listBox/colorBox/listView を利用できます。
コントロール GridViewColumn のプロパティー DisplayMemberBinding= に、データバインディングを適用します。すると、self.view.ItemsSource を介して、結合するデータオブジェクト ColorItem のインスタンス属性 name/red/green/blue が、リスト項目に反映されます。

class ExWindow(Window):
    def init(self):
        target = "listBox", "listView", "colorBox"
        self._Controls(target)
        
        for view in [
            ItemList(self.listBox , self),
            GridList(self.listView, self),
            ]:
            ColorList(view).addItems(self.colorBrushes())

    def paint(self, color):
        self.colorBox.Background = color

self.listBox は、ItemList に取り込まれることで、ListImplementor で規定したプロトコルに従うようになります。self.listView/GridList についても同様です。すると、どのようなコントロールを使って実現するか(how)に依らず、統一したアクセス(what)が可能になります。第2引数に self を指定するのは、必要なら自身 self への逆アクセスを可能にするためです。
さらに、ItemList/GridList は、ColorList に取り込まれることで、ListAbstraction で規定したプロトコルに従うようになります。すると、規定されたメソッド addItems を使って、複数のリスト項目 items を追加できます。