简体   繁体   English

WPF-MVVM单选按钮自动生成

[英]WPF-MVVM Radio Button generated automatically

I have an application where I present a Form. 我有一个提交表格的应用程序。 The form contains multiple Radio Buttons and they are displayed 1 next to each other. 表单包含多个单选按钮,并且它们彼此相邻显示1。 I need to load the colors from the list and create a radio button for each color, then when the users selects a color I want to grab the "SelectedItem" from the control. 我需要从列表中加载颜色并为每种颜色创建一个单选按钮,然后当用户选择一种颜色时,我想从控件中获取“ SelectedItem”。 I know you can do that easily with a list but how do I do that when I need to place the controls next to each other ?? 我知道您可以使用列表轻松地做到这一点,但是当我需要将控件彼此相邻放置时,该怎么办呢?

Code : 代码:

<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>

Remark : the ListParts is just a list containing the colors, also this view is attached to a viewModel 备注:ListParts只是一个包含颜色的列表,该视图也附加到viewModel

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();


    }
}

And the Common Class is just laoding the Data : 而普通类只是在给数据加油:

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;
    }
}

How can I display the members of the ListParts on each of my radio button, without the use of a ListView ? 如何在不使用ListView的情况下在每个单选按钮上显示ListParts的成员?

Let me know if you guys need more info and thanks for the answers 让我知道你们是否需要更多信息,谢谢您的回答

You can use ListBox.ItemsPanel to specify the type of panel you want - probably <StackPanel Orientation="Horizontal/> . 您可以使用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>

See the examples in the ItemsPanel property documentation on MSDN for more information. 有关更多信息,请参见MSDN上ItemsPanel属性文档中的示例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM