Как обращаться с дополнительными предметами - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть около 9 флажков, в которых вы можете выбрать, какие элементы доступны для будущей функции. Затем я хочу вызвать мою функцию, чтобы выбрать случайный один из этих элементов X% времени (X устанавливается константой, чтобы определить, как часто это должно происходить), один элемент выбирается, его нужно извлечь из список, поэтому он не будет выбран снова в следующий раз, когда нам нужно будет вызвать foo ().

Я думал, что сначала я бы перебрал все флажки и добавил те, которые были доступны в список. Я бы сделал случайный выбор, чтобы определить, должен ли я вытащить элемент, а затем вытащить его из списка и затем удалить элемент списка.

Это лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Создать коллекцию, которая ссылается на флажки. случайным образом выбрать из этой коллекции и один раз выбрать удалить его. Таким образом, вы не будете использовать один и тот же флажок.

0 голосов
/ 06 ноября 2011

Пара баллов:1) Не путайте ваш пользовательский интерфейс с вашей бизнес-логикой.2) Вы можете создать лучшее решение с коллекцией и DataTemplate, примерно так:

C #

public class ThingType : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    public string ThingName { get; set; }

    private bool thingAvailable;
    public bool ThingAvailable { get { return thingAvailable; } set { thingAvailable = value; PropertyChanged(this, new PropertyChangedEventArgs("ThingAvailable")); } }
}

public class MainVM 
{
    public ObservableCollection<ThingType> MyThings { get; set; }


    public MainVM()
    {
        MyThings = new ObservableCollection<ThingType>();
        MyThings.Add(new ThingType() { ThingName = "thing 1" });
        MyThings.Add(new ThingType() { ThingName = "thing 2" });
    }

    public ThingType GetRandomThing()
    {
        var availableThings = MyThings.Where(x => x.ThingAvailable == true).ToArray();
        int randomThingIndex = new Random().Next(availableThings.Length - 1);
        availableThings[randomThingIndex].ThingAvailable = false;
        return availableThings[randomThingIndex];
    }
}

XAML

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate x:Key="thingTemplate">
            <CheckBox Content="{Binding ThingName}" IsChecked="{Binding ThingAvailable, Mode=TwoWay}"/>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <ListBox Height="100" HorizontalAlignment="Left" Margin="135,56,0,0" Name="listBox1" VerticalAlignment="Top" ItemsSource="{Binding MyThings}" ItemTemplate="{StaticResource thingTemplate}" Width="120" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="88,195,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...