WPF-MVVM单选按钮自动生成

时间:2015-01-26 19:53:03

标签: c# wpf list mvvm radio-button

我有一个申请表,我提交了一份表格。表单包含多个单选按钮,它们彼此相邻显示。我需要从列表中加载颜色并为每种颜色创建一个单选按钮,然后当用户选择一种颜色时我想抓住" SelectedItem"从控制。我知道你可以用列表轻松地做到这一点,但是当我需要将控件放在一起时我该怎么做???

代码:     

<Grid>
    <StackPanel VerticalAlignment="Top">
        <GroupBox Name="CheckBoxes" Margin="5" >
            <StackPanel Name="wrpCheckBoxes" DataContext="{Binding ListParts}">
                <RadioButton Name="chkRed" Content="{Binding Description}" Visibility="{Binding DataBindingModel.ColorRed}" Tag="{Binding ID}" />
                <RadioButton Name="chkGreen" Content="Green" Visibility="{Binding DataBindingModel.ColorGreen}" />
                <RadioButton Name="chkBlue" Content="Blue" Visibility="{Binding DataBindingModel.ColorBlue}" />
                <RadioButton Name="chkGray" Content="Gray" Visibility="{Binding DataBindingModel.ColorGray}" />
                <RadioButton Name="chkYellow" Content="Yellow" Visibility="{Binding DataBindingModel.ColorYellow}" />
                <RadioButton Name="chkBlack" Content="Black" Visibility="{Binding DataBindingModel.ColorBlack}" />
            </StackPanel>
        </GroupBox>
    </StackPanel>

    <StackPanel VerticalAlignment="Bottom" Margin="5">
        <ListView x:Name="listBoxItems" BorderThickness="1" ItemsSource="{Binding ListParts}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Index" DisplayMemberBinding="{Binding Index}" />
                    <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Description}" />
                    <GridViewColumn Header="Price" DisplayMemberBinding="{Binding Price}" />
                </GridView>
            </ListView.View>
        </ListView>

        <!--<ListBox x:Name="listBoxItems" ItemsSource="{Binding ListParts}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <RadioButton GroupName="rbList" Tag="{Binding}" Content="{Binding Description}" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>-->
    </StackPanel>
</Grid>

备注:ListParts只是一个包含颜色的列表,此视图也附加到viewModel

ViewModel:

public class DataBindingViewModel : ViewModelBase
{
    #region Private Fields
    private DataBindingModel _DataBindingModel;
    private List<PartsModel> _ListParts;

    private string _Description1;
    private int _TagID;
    #endregion

    #region Properties
    public DataBindingModel DataBindingModel
    {
        get { return this._DataBindingModel; }
        set
        {
            if (this._DataBindingModel == value)
                return;

            this._DataBindingModel = value;
            OnPropertyChanged("DataBindingModel");
        }
    }

    public List<PartsModel> ListParts
    {
        get { return this._ListParts; }
        set
        {
            if (this._ListParts == value)
                return;

            this._ListParts = value;
            OnPropertyChanged("ListParts");
        }
    }

    public string Description1
    {
        get { return this._Description1; }
        set
        {
            if (this._Description1 == value)
                return;

            this._Description1 = value;
            OnPropertyChanged("Description1");
        }
    }

    public int TagID
    {
        get { return this._TagID; }
        set
        {
            if (this._TagID == value)
                return;

            this._TagID = value;
            OnPropertyChanged("TagID");
        }
    }
    #endregion

    public DataBindingViewModel(DataBindingModel DataBinding)
    {
        this.DataBindingModel = DataBinding;
        this.ListParts = Common.GetData();


    }
}

公共类只是在使用数据:

public static class Common
{
    public static List<PartsModel> GetData()
    {
        List<PartsModel> listParts = new List<PartsModel>();

        listParts.Add(new PartsModel(1, "1234561", "Color Red", Convert.ToDecimal(15.99)));
        listParts.Add(new PartsModel(2, "1234562", "Color Green", Convert.ToDecimal(17.00)));
        listParts.Add(new PartsModel(3, "1234563", "Color Blue", Convert.ToDecimal(12.95)));
        listParts.Add(new PartsModel(4, "1234564", "Color Gray", Convert.ToDecimal(9.95)));
        listParts.Add(new PartsModel(5, "1234565", "Color Yellow", Convert.ToDecimal(10.55)));
        listParts.Add(new PartsModel(6, "1234566", "Color Black", Convert.ToDecimal(99.99)));

        return listParts;
    }
}

如何在不使用 ListView 的情况下在每个单选按钮上显示 ListParts 的成员?

如果您需要更多信息并感谢答案,请告诉我

1 个答案:

答案 0 :(得分:2)

您可以使用ListBox.ItemsPanel指定所需的面板类型 - 可能是<StackPanel Orientation="Horizontal/>

<ListBox>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <RadioButton GroupName="rbList" Tag="{Binding}" Content="{Binding Description}" />
    </DataTemplate>
  </ListBox.ItemTemplate>
  <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Orientation="Horizontal"
                  VerticalAlignment="Center"
                  HorizontalAlignment="Center"/>
    </ItemsPanelTemplate>
  <ListBox.ItemsPanel>
<ListBox>

有关详细信息,请参阅the examples in the ItemsPanel property documentation on MSDN