2011-08-09 14 views
2

xamgridにバインドされていない列を追加したいのですが、コンボボックスから値を取得したい場合、コンボボックスは実行時にチャネルオブジェクトにバインドされます。xaml要素を使用してコンボボックスからsilverlightバインディンググリッド列をバインドする

バインドされていない列を追加しようとしました。試してみました

<Binding Source="{StaticResource ChannelTemplate}" Path="SelectedItem.Content" /> 

しかし、私がグリッドにchannelcodeをバインドしたい 動作するようには思えません。

グリッド、以下のクラスコード。

<UI:BaseControl.Resources> 
     <DataTemplate x:Key="ChannelTemplate" > 
      <StackPanel Orientation="Horizontal" > 
       <TextBlock Margin="2" Text="{Binding Path=ChannelName}"/> 
      </StackPanel> 
     </DataTemplate> 
</UI:BaseControl.Resources> 

<ComboBox Name="CboChannel" Margin="59,6,0,0" Height="22" Width="200" VerticalAlignment="Top" HorizontalAlignment="Left" ItemTemplate="{StaticResource ChannelTemplate}" > 
</ComboBox> 

<ig:XamGrid Name="grdInventory" ColumnWidth="auto" .... 
<ig:XamGrid.Columns> 
<ig:UnboundColumn Key="Channel"> 
        <ig:UnboundColumn.ItemTemplate> 
         <DataTemplate >       
     <TextBlock > 
           <TextBlock.Text > 
            <Binding Source="{StaticResource ChannelTemplate}" Path="SelectedItem.Content" /> 
           </TextBlock.Text> 
          </TextBlock>     
         </DataTemplate> 
       </ig:UnboundColumn.ItemTemplate> 
</ig:UnboundColumn> 
</ig:XamGrid.Columns> 
</ig:XamGrid> 

コード:

Public Class Channel 
    Implements IDisposable 

    <DataMember(IsRequired:=True)> 
    Public Property ChannelID As Long 

    <DataMember()> 
    Public Property ChannelDescription As String 

    <DataMember()> 
    Public Property ChannelName As String 

    <DataMember()> 
    Public Property ChannelCode As String 
End Class 

おかげ Jは

答えて

0

あなたが結合していない列やコンボボックス選択した項目の両方が同じ値にバインドされるようにDataContextのパターンを使用して試みることができます。

1)この記事をもとにDataContextProxyクラスを作成します:http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspx

2)グリッドが含まれているページにDataContextProxyに静的リソースを作成するたとえば、(私はここで、標準的なデータグリッドを使用しています)コンボ

<UserControl.Resources> 
    <Silverlight:DataContextProxy x:Key="Proxy"></Silverlight:DataContextProxy> 
</UserControl.Resources> 

3)コンボのSelectedValueプロパティをVMの公開プロパティにバインドします。

<ComboBox Height="23" 
      HorizontalAlignment="Left" 
      SelectedValue="{Binding TestProperty, Mode=TwoWay}" 
      SelectedValuePath="Content" 
      Margin="126,54,0,0" x:Name="comboBox1" 
      VerticalAlignment="Top" Width="120" DisplayMemberPath="Content"> 
    <ComboBox.Items> 
     <ComboBoxItem x:Name="x" Content="test2"></ComboBoxItem> 
     <ComboBoxItem x:Name="x2" Content="test"></ComboBoxItem> 
    </ComboBox.Items> 
</ComboBox> 

4)グリッド列テンプレートを同じVMプロパティにバインドします。

<sdk:DataGrid AutoGenerateColumns="True" 
        Height="120" 
        HorizontalAlignment="Left" 
        Margin="155,153,0,0" 
        Name="dataGrid1" 
        VerticalAlignment="Top" Width="120">    
     <sdk:DataGrid.Columns> 
      <sdk:DataGridTemplateColumn Header="Test"> 
       <sdk:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Mode=OneWay,Source={StaticResource Proxy},Path=DataSource.TestProperty}"> 
         </TextBlock> 
        </DataTemplate> 
       </sdk:DataGridTemplateColumn.CellTemplate> 
      </sdk:DataGridTemplateColumn> 
     </sdk:DataGrid.Columns> 
    </sdk:DataGrid> 

これは私がクイックテストアプリをノックしたときに役立ちました。 DataGridTemplateColumnは、選択したコンボボックスアイテムと同期しています。

関連する問題