与WPF ComboBox绑定

时间:2014-08-21 11:42:34

标签: wpf

enter image description here我在我的代码中使用了名为cmbTobetraced的组合框来选择是或否,但是我无法将数据绑定到组合框。它没有显示"否&#34 ;组合框中的值Text .Its始终显示yes值。我已经使用SelectedItem和SelectedItem进行了检查,但也没有显示结果.Tobetraced是一个属性名称,它是我班级中的字符串数据类型:

...
<GridViewColumn Header="To be traced" Width="Auto">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <ComboBox  
                       Width="60"     
                       Name="cmbTobetraced"     
                       Margin="0,15,0,5"    
                       HorizontalAlignment="Left"
                       VerticalContentAlignment="Center" 
                       BorderBrush="White"      
                       SelectedValuePath="Tag"
                       Text="{Binding Path=Tobetraced, Mode=TwoWay}">
                <ComboBoxItem Content="Yes" Tag="0"/>
                <ComboBoxItem Content="No" Tag="1" />
                <!--<ComboBox.DisplayMemberPath>
                <Binding Path="Tobetraced"  />
                </ComboBox.DisplayMemberPath>-->
                <!--<ComboBoxItem  >Yes</ComboBoxItem>
                <ComboBoxItem >No</ComboBoxItem>-->
            </ComboBox>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="View Panel Trace Details " Width="Auto">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock  Width="Auto"> 
                <Hyperlink Foreground="White" 
                           Click="buttonClose_Click" 
                           Cursor="Hand">View Panel Trace</Hyperlink>
            </TextBlock>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</ScrollViewer>
</Grid>

2 个答案:

答案 0 :(得分:0)

我认为您的XAML存在一些问题。 SelectedValuePath不适用于您使用的设计方法。我认为你真正需要绑定的是SelectedItem属性。

MSDN网络参考中详尽解释了SelectedItemSelecteValuePathSelectedValue的概念 - 我强烈建议您对此概念非常熟悉。您可能想要开始的一个参考是:http://msdn.microsoft.com/en-us/library/ms788714(v=vs.110).aspx

您可以像这样绑定SelectedItem

<ComboBox  
     Width="60"     
     Name="cmbTobetraced"     
     Margin="0,15,0,5"    
     HorizontalAlignment="Left"
     VerticalContentAlignment="Center" 
     BorderBrush="White"      
     SelectedItem="SelectedAnswer"
     Text="{Binding Path=Tobetraced, Mode=TwoWay}">

代码隐藏可能如下所示:

    private string selectedAnswer;
    public object SelectedAnswer
    {
        get { return selectedAnswer; }
        set
        {
            var cboItem = value as ComboBoxItem;
            if (cboItem == null) return;

            selectedAnswer = cboItem.Content.ToString();
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("SelectedAnswer"));
            }
        }
    }

答案 1 :(得分:0)

你的代码中只有一个简单的错误。您应该将Tobetraced属性数据绑定到ComboBox.SelectedItem属性而不是ComboBox.Text属性。此外,您可以将int属性数据绑定到ComboBoxItem.SelectedValue属性,以获取放入ComboBoxItem.Tag属性的数值...尝试此操作:

<ComboBox Width="60" Name="cmbTobetraced" Margin="0,15,0,5" HorizontalAlignment="Left"
    VerticalContentAlignment="Center" BorderBrush="White" SelectedValuePath="Tag" 
    SelectionChanged="ComboBox_SelectionChanged" SelectedValue="{Binding IntProperty}"
    SelectedItem="{Binding Tobetraced, Mode=TwoWay}">
    <ComboBoxItem Content="Yes" Tag="0" />
    <ComboBoxItem Content="No" Tag="1" />
</ComboBox>

您可能还会发现MSDN中的以下资源非常有用:

ComboBox Class

How to: Use SelectedValue, SelectedValuePath, and SelectedItem