У меня есть класс Channel, который имеет свойства: channelName
, (больше, но не имеет отношения к этому вопросу) и два List<double>
(, yValues
).Связывание только что созданного класса
public class Channel
{
public string channelName;
public List<double> xValues= new List<double>();
public List<double> yValues= new List<double>();
}
У меня есть класс с именем файла, есть свойства, как: fileName
, ObservableCollection<Channel>
listOfChannels
. Файл имеет метод read(); который создает внутренние объекты класса Channel для чтения данных, в зависимости от данных будет переменное количество каналов и хранится в списках xValues
и yValues
данных.
public class File
{
public string fileName{ get; set; }
public ObservableCollection<Canal> channels{ get; set; }
public void read() {//stuff}
}
В моей программе я создал ComboBox
, что привязываться к этим данным так:
<ComboBox x:Name="comboFile"
ItemsSource="{Binding myListOfChannels}"
DisplayMemberPath="channelName"
SelectedValuePath="channelName"
SelectedItem="{Binding selectedChannel}" />
Где myListOfChannels
и selectedChannel
определяются как:
public ObservableCollection<Canal> myListOfChannels { get; set; }
public Canal selectedChannel { get; set; }
Я инстанцирован их правильно в дальнейшем в коде.
Когда я нажимаю кнопку, файл загружается и создает новый объект класса File
. Это мой exampleFile
.
private void openButton_Click(object sender, RoutedEventArgs e)
{
File exampleFile= new File();
Channel exampleChannel= new Channel();
exampleFile.fileName= @"C:\Users\Path\myFile.txt"; //I haven't created OpenDialog yet
exampleFile.read();
myListOfChannels = new ObservableCollection<Channel>();
foreach (Channel mychannel in exampleFile.channels)
{
myListOfChannels .Add(mychannel);
}
selectedChannel = exampleFile.channels[0];
comboFile.DataContext = this;
}
Это перевод с другого языка, в синтаксисе могут быть небольшие ошибки, но он работает. Пожалуйста, мне не нужна полная редизайн, есть другие ограничения. Мой вопрос о том, если это возможно, чтобы удалить избыточное ассигнование (myListOfChannels
и selectedChannel
, в foreach
петли, и т.д.) и непосредственно связывать данные из моих только что создал exampleFile
, что-то вроде этого:
<ComboBox x:Name="comboFile"
ItemsSource="{Binding exampleFile.channels}"
DisplayMemberPath="exampleChannel.channelName"
SelectedValuePath="exampleChannel.channelName"
SelectedItem="{Binding selectedChannel}" />
Я очень новичок здесь, поэтому, если бы вы могли на самом деле помочь мне в написании, это было бы здорово. Я прочитал несколько руководств по привязке данных, но я не могу этого понять.
BTW. Это может быть важно: весь этот код находится внутри UserControl
. В моем MainWindow.xaml
это всего лишь экземпляр этого UserControl
.
Я попытался изо всех сил объяснить, что хочу, но если что-то неясно, просто спросите об этом. Спасибо.
Спасибо! Я мог бы удалить этот цикл foreach и привязать непосредственно ExampleFile. Можно связать что-то с другим UserControl? Например, у меня есть myControl1 и myControl2. Можно установить флажок в 1 в зависимости от того, проверен ли другой чечбок в 2? (Немного offtopic, извините) – Sturm