mvvm:我应该如何将布尔值绑定到组合框

时间:2014-06-21 04:12:55

标签: mvvm

我正在MVVM中做一个应用程序,我是新手... 我有一个布尔字段,并希望向用户显示一个组合框,其中包含项目是/否,但是当用户选择它时,但在数据上下文中,值为1和0。 我有以下代码:

<TextBlock Grid.Row="2" Grid.Column="2" Text="Batch Flag" Margin="5,0,0,0" />
                                <ComboBox Grid.Row="2" Grid.Column="3" x:Name="cboBtchFlg" SelectedItem="{Binding SelectedADM_M022.BtchFlg,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  Margin="5,0,0,2" Background="Transparent">
                                    <ComboBoxItem Tag="1">True</ComboBoxItem>
                                    <ComboBoxItem Tag="0">False</ComboBoxItem>
                                </ComboBox>    

1 个答案:

答案 0 :(得分:2)

您可以使用转换器。如果视图模型属性是一个bool,并且它绑定到组合框的SelectedIndex属性(这是一个int),那么这个例子将提供你需要的东西。

public class IntToBoolConverter : IValueConverter
{
    // from view model to view
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool)
        {
            bool trueFalse = (bool)value;
            return trueFalse == true ? 0 : 1;
        }
        return value;
    }

    // from view to model
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is int)
        {
            int index = (int)value;
            if (index == 0)
                return true;
            if (index == 1)
                return false;
        }
        return value;
    }
}

将SelectedIndex绑定修改为

SelectedItem="{Binding SelectedADM_M022.BtchFlg,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, Converter={StaticResource boolConverter}}"

假设您有一个名为boolConverter的资源,它引用了转换器类e,g,

<Window.Resources>
    <local:IntToBoolConverter x:Key="boolConverter" />
</Window.Resources>