В настоящее время я работаю над новым графическим интерфейсом, ключевым элементом которого является список. До сих пор мне удавалось отображать и выбирать несколько предметов в этом списке, что было не так уж и сложно.
Моя цель состоит в том, чтобы иметь несколько файлы .cs (возможно, в дальнейшем расширении как файлы сценариев vb) в папка внутри проекта, которые правильно отображаются в списке основного представления и будут выполняться, если выбран соответствующий элемент в списке.
До сих пор я пытался создать список и все остальные элементы графического интерфейса (кнопки, текст и т. д.) и соединил список с привязываемой коллекцией модели сценария (которая на данный момент является собственным классом для целей тестирования и следует заменить правильными файлами .cs)
В приведенном ниже коде вы можете увидеть обходной путь с этим пользовательским классом и проверкой выбора для нескольких элементов списка.
private void Run_Click(object sender, RoutedEventArgs e)
{
//Show user the scripts which are being processed, these are the previous selected Scripts
List<string> selectedList = new List<string>();
foreach (ScriptModel selectedScript in MainListBox.SelectedItems)
{
selectedList.Add(selectedScript.Name.ToString());
}
//check if no Script was selected, and if so, just return/do nothing
if (selectedList.Count() == 0) { return; }
MessageBox.Show("The following Scripts will be processed: " + Environment.NewLine +
string.Join(Environment.NewLine, selectedList));
//Call the Connection for Data-Export
}
private BindableCollection<ScriptModel> _scriptscollection=new BindableCollection<ScriptModel>();
public BindableCollection<ScriptModel> ScriptsCollection
{
get { return _scriptscollection; }
set { _scriptscollection = value; }
}
Я хотел бы знать, как я могу заменить (или связать) этот пользовательский класс с реальными файлами .cs (которые являются своего рода сценариями) в папке проекта, чтобы я мог отображать эти имена файлов и выбирать соответствующие файлы для выполнения . (поэтому соединение должно работать в обе стороны)
Извините, если этот вопрос кажется немного странным и общим, но я действительно смущен этим.
Вы понимаете, что chsarp компилируется, а не интерпретируется? То, что вы показываете, по своей сути не является интерпретируемым сценарием, который вы можете просто запустить. Отображение кода в текстовом поле, безусловно, является самой простой частью этого.
Эти «скрипты» закодированы разработчиком, но для расширения и максимально возможной модульности они должны оставаться в своем собственном файле с передачей определенной информации. Если вы выберете 2 «скрипта» и нажмете кнопку «Выполнить», должно быть одно соединение для внешних данных, а выбранные сценарии должны экспортировать определенные части набора данных в файл Excel.
Спасибо за совет. Я меняю дизайн для этого случая :) (в настоящее время читаю MVVM)





Я полагаю, что вы слишком усложнили дело. Вот код, который найдет все файлы .cs в каталоге, а затем, выбрав один из них в ListBox, запустит этот файл.
Трудно точно сказать, о чем вы просите, но, надеюсь, это поможет.
XAML
<ListBox ItemsSource = "{Binding ScriptFiles}" SelectedItem = "{Binding SelectedScript}"/>
Код позади / ViewModel
public List<string> ScriptFiles => Directory.GetFiles(FilePath, "*.cs").ToList();
private string selectedScript;
public string SelectedScript
{
get { return selectedScript; }
set { selectedScript = value; Process.Start(value); }
}
Большое спасибо. Я попробую это после урока.
если вы просто хотите: отобразить все файлы cs в определенном месте, запустить этот файл cs, когда вы нажмете на него в ListBox, тогда все будет в порядке.
Спасибо еще раз. Пока все работает нормально, мне просто нужно настроить некоторые вещи для конкретного использования.
Рад слышать, дайте мне знать, если вам нужно что-нибудь еще. Я бы также посоветовал внимательно взглянуть на MVVM, если вы не знакомы, и понять, как это работает и т. д. :)
Не уверен, что следую. Вы хотите иметь возможность компилировать и выполнять пользовательские сценарии? Пожалуйста, объясните реальную проблему в вашем вопросе, так как я думаю, что список не имеет значения.