使用xaml元素绑定的comboBox中的silverlight绑定网格列

时间:2011-08-09 13:45:44

标签: silverlight silverlight-4.0

我想将一个未绑定的列添加到xamgrid但是我想从combox获取值,组合框在运行时绑定到通道对象。

我尝试添加未绑定的列。

试过:

<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

由于 Ĵ

1 个答案:

答案 0 :(得分: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与选定的组合框项目保持同步。