#c# #wpf #data-binding
#c# #wpf #привязка к данным
Вопрос:
У меня есть LineSeries
, к которому я привязываю данные из ObservableCollection
этого типа ChartData
. Теперь, в моем пользовательском интерфейсе, у меня есть TextBox
, в котором мне нужно показать значение Y ряда. Как мне привязать Value
свойство к TextBox
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<ChartData> lineSeries1Data = new ObservableCollection<ChartData>();
simChart.DataContext = lineSeries1Data;
}
public class ChartData : INotifyPropertyChanged
{
DateTime _Name;
double _Value;
public DateTime Name
{
get
{
return _Name;
}
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
public double Value
{
get
{
return _Value;
}
set
{
_Value = value;
OnPropertyChanged("Value");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Это мой XAML для TextBox
:
<TextBox Name="TxtSignal1Vh1" DataContext="lineSeries1Data" Text="{Binding ChartData.Value}" />
Комментарии:
1.
Value
свойство чего,ChartData
?2. Ваша цель не ясна, у вас их много
ChartData
вObservableCollection
, но только одинTextBox
. ЧтоValue
должно отображаться?3. У меня есть
Chart
и у меня естьTextBox
.Chart
Значения x, y привязаны к двум свойствам вChartData
классе черезObservableCollection
. Теперь я хочу показать значение y диаграммы вTextBox
. Буквальным именем y-значения является свойство «Value».4. @Abhishek simchart. Datacontext=lineSeries1Data; что такое simchart??
5. @AbhinavSharma : simChart — это название
LineSeries
Ответ №1:
Вот некоторый рабочий код, создайте пользовательский элемент управления, состоящий из диаграммы текстовых полей, а затем привязывает его Datacontext к соответствующей наблюдаемой коллекции.
public MainWindow()
{
InitializeComponent();
observableCollection<DataChart>1st=new observableCollection<DataChart>();
observableCollection<DataChart>2nd=new observableCollection<DataChart>();
win.DataContext = (1st Observable Collection)
lose.DataContext=(2nd Observable Collection)
}
MainWindows xaml
<Grid>
<this:UserControl1 x:Name="win" Margin="10,21,325,144"/>
<this:UserControl1 x:Name="lose" Margin="275,21,10,144"/>
</Grid>
Пользовательский контроль xaml
<Grid>
<TextBox Text="{Binding Path=Value}" VerticalAlignment="Top" Width="164"/>
<TextBox Text="{Binding Path=Name}" VerticalAlignment="Top" Width="164"/>
</Grid>
Комментарии:
1. Если у меня есть более одной диаграммы, то каким был бы подход? Мне пришлось бы правильно установить
DataContext
для каждой из диаграмм? Как я тогда буду устанавливатьDataContext
дляTextBox
?2. Итак, как мне установить
DataContext
дляTextBox
тогда? Можете ли вы привести пример, который устанавливаетDataContext
непосредственно к элементу управления вместо его родительского элемента / предка?3. @Abhishek Пожалуйста, уточните ваши требования, поскольку я не уверен, чего именно вы хотите….
4. У меня есть две диаграммы. Я явно устанавливаю для
DataContext
двух диаграмм значение twoObservableCollection
s. Обычно, если имеется только одна диаграмма, я могу установитьDataContext
значение this вConstructor
. Но, поскольку у меня есть две диаграммы, я устанавливаю для каждой из диаграммDataContext
собственныеObservableCollection
значения. Теперь у меня есть дваTextBox
варианта, в которых я должен отобразить значение Y для двух графиков. Итак, как мне привязать второе свойство вObservableCollection
(которое является значением Y) кTextBox
?5. Это просто идея, но как насчет создания UserControl, состоящего из диаграммы текстовых полей, а затем привязки datacontext Usercontrol к его соответствующей наблюдаемой коллекции!!!!