0

リスト ビュー内でコンボボックスがバインド値に設定されないという問題があります。

以下のスクリーンショットからわかるように、他の値はバインディングから正しく取り込まれています。テキストボックス/ラベルではなくコンボボックスであるという事実と関係がありますか?

ここに画像の説明を入力

admin コンボには、true または false の 2 つのオプションがあります。リストビュー (以下のコード) がバインドされているデータテーブルには、さまざまなレコードの値 "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 つあるためです。これは、それもタイプになることを意味します。次のようなことを試してください:ComboBoxItemStringSelectedItemComboBoxItem

<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

またはIsAdminのみを含む文字列の場合、コンバーターを使用して単純にバインドできます。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から、プロパティ (タイプが の場合) を のプロパティに変換する必要があります。booltrue falseBindIsAdminboolSelectedItemComboBox

<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値ではなくのプロパティにする必要があると思います。IsAdminSelectedItemComboBoxText

于 2013-10-07T10:54:47.410 に答える