我遇到一个问题,即组合框没有在列表视图中设置为绑定值。
从下面的屏幕截图中可以看到,其他值正确地从绑定中填充。是否与文本框/标签相对的组合框有什么关系呢?
admin combo有两个选项,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和所有排序。
那么,我如何将数据表值绑定到组合,为什么它不适用于组合并且对文本框有效?
由于
答案 0 :(得分:1)
这是因为您的ComboBox
有两项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"
答案 1 :(得分:0)
如果IsAdmin
是仅包含True
或False
的字符串,则只需使用CheckBox
转换器将其绑定到StringToBoolean
:
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>
答案 2 :(得分:0)
有多种方法可以解决您的问题。就个人而言,我更愿意使用实际的bool
属性来表示布尔值。使用此方法,您需要Bind
到bool
集合,其中包含您的true
和 false
值,然后{{1将Bind
属性(如果类型为IsAdmin
)改为bool
的{{1}}属性。
SelectedItem
当然,您需要将此ComboBox
添加到绑定到控件的任何对象中,或者更改您的<ComboBox ItemsSource="{Binding BoolCollection}" SelectedItem="{Binding IsAdmin}" />
...您可以像这样创建BoolCollection
个项目:
Binding
@dkozl已经提到了一种替代方法,但我相信您仍需bool
从xmlns:System="clr-namespace:System;assembly=mscorlib"
...
<ComboBox.Items>
<System:Boolean>True</System:Boolean>
<System:Boolean>False</System:Boolean>
</ComboBox.Items>
属性到Bind
IsAdmin
属性而不是SelectedItem
值。