0

我有一个问题,即组合框未设置为列表视图中的绑定值。

正如您从下面的屏幕截图中看到的那样,其他值是从绑定中正确填充的。这与它是一个与文本框/标签相对的组合框有关吗?

在此处输入图像描述

管理员组合有两个选项,true 或 false。列表视图(下面的代码)绑定到的数据表包含各种记录的值“True”和“False”。

<ListView Name="grdUsers" HorizontalAlignment="Left" ItemsSource="{Binding}" Margin="6,27,0,0" VerticalAlignment="Top" Height="225" Width="289"
              ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListView.View>
            <GridView >
                <GridViewColumn DisplayMemberBinding="{Binding Path=PK}" Header="PK" Width="30">
                </GridViewColumn>
                <GridViewColumn Header="Name" Width="115">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=Name}" Width="115"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Group" Width="50">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=MemberGroup}" Width="45"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Admin" Width="70">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox Text="{Binding Path=IsAdmin}"  Width="55">
                                <ComboBoxItem>True</ComboBoxItem>
                                <ComboBoxItem>False</ComboBoxItem>
                            </ComboBox>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

这是这里的最后一项问题,我尝试将绑定更改为 selectedItem 和各种类型。

那么,如何将数据表值绑定到组合,为什么它对组合不起作用而对文本框起作用?

谢谢

4

3 回答 3

1

这是因为您ComboBox有 2 项ComboBoxItem类型而不是类型String,这意味着它SelectedItem也将属于一种ComboBoxItem类型。尝试这样的事情:

<ComboBox SelectedItem="{Binding Path=IsAdmin}" Width="55">
   <ComboBox.Items>
      <sys:String>True</sys:String>
      <sys:String>False</sys:String>
   </ComboBox.Items>
</ComboBox>

为此,您需要sys:像这样定义命名空间:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
于 2013-10-07T10:31:01.487 回答
0

如果是仅包含orIsAdmin的字符串,您可以使用转换器简单地将其绑定到 a :TrueFalseCheckBoxStringToBoolean

public class StringToBooleanConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (value.ToString() == "True") ? true : false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

将此转换器用作资源

<Window.Resources>
    <local:StringToBooleanConverter x:Key="strToBoolConverter"/>
</Window.Resources>

并在绑定中使用它

          <GridViewColumn Header="Admin" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding Path=IsAdmin, Converter={StaticResource strToBoolConverter}}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
于 2013-10-07T10:30:41.047 回答
0

有多种方法可以解决您的问题。就个人而言,我更喜欢使用实际bool属性来表示布尔值。使用这种方法,您需要Bind一个bool包含您的true false值的集合,然后Bind将您的IsAdmin属性(如果它是 type bool)添加到 the 的SelectedItem属性中ComboBox

<ComboBox ItemsSource="{Binding BoolCollection}" SelectedItem="{Binding IsAdmin}" />

当然,您需要将其添加BoolCollection到您已绑定到控件的任何对象中,或者更改您的Binding...您还可以创建bool这样的项目:

xmlns:System="clr-namespace:System;assembly=mscorlib"
...
<ComboBox.Items>
    <System:Boolean>True</System:Boolean>
    <System:Boolean>False</System:Boolean>
</ComboBox.Items>

@dkozl 提到了另一种方法,尽管我相信你仍然需要Bind从你的IsAdmin属性到SelectedItem属性ComboBox而不是Text值。

于 2013-10-07T10:54:47.410 回答