Мне нужна ваша помощь с WPF Datagrid. Я посмотрел на некоторые ответы на вопросы в платформе и сделал что-то подобное, но не могу решить некоторые проблемы.WPF Datagrid Связывание с Combobox и текстовым полем
Я STRUCT назван таблице
public struct Table
{
public string Name { get; set; }
public int Value { get; set; }
}
и класса им, как номер
public class Room : INotifyPropertyChanged
{
public string strRoomlName;
public string Name
{
get { return strRoomlName; }
set { strRoomlName = value; }
}
public ObservableCollection<Table> tbTables = new ObservableCollection<Table>();
public ObservableCollection<Table> PrpTables
{
get { return tbTables; }
set
{
tbTables = value;
OnPropertyChanged("PrRawValues");
if (value != null && value.Count > 0)
{
PrpSelectedTable = value.First();
}
}
}
private Table selectedTable;
public Table PrpSelectedTable
{
get
{
return selectedTable;
}
set
{
selectedTable = value;
OnPropertyChanged("PrpSelectedTable");
ComboValue = value.Value;
OnPropertyChanged("ComboValue");
}
}
public int ComboValue
{
get;
set;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
и главный класс следующим образом,
public partial class MainWindow : Window
{
ObservableCollection<Room> rooms;
public MainWindow()
{
InitializeComponent();
rooms = new ObservableCollection<Room>();
Table t1 = new Table { Name = "Table #1", Value = 0 };
Table t2 = new Table { Name = "Table #2", Value = 3 };
Table t3 = new Table { Name = "Table #3", Value = 5 };
Table t4 = new Table { Name = "Table #4", Value = 2 };
Room rm1 = new Room();
rm1.Name = "Small Hall";
rm1.tbTables.Add(t1);
rm1.tbTables.Add(t2);
rm1.tbTables.Add(t3);
rm1.tbTables.Add(t4);
rooms.Add(rm1);
Table t21 = new Table { Name = "Table #1", Value = 0 };
Table t22 = new Table { Name = "Table #2", Value = 3 };
Table t23 = new Table { Name = "Table #3", Value = 5 };
Table t24 = new Table { Name = "Table #4", Value = 12 };
Table t25 = new Table { Name = "Table #5", Value = 8 };
Table t26 = new Table { Name = "Table #6", Value = 3 };
Table t27 = new Table { Name = "Table #7", Value = 20 };
Room rm2 = new Room();
rm2.Name = "Main Hall";
rm2.tbTables.Add(t21);
rm2.tbTables.Add(t22);
rm2.tbTables.Add(t23);
rm2.tbTables.Add(t24);
rm2.tbTables.Add(t25);
rm2.tbTables.Add(t26);
rm2.tbTables.Add(t27);
rooms.Add(rm2);
this.gridSignals.DataContext = rooms;
}
XAML Layout:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Custom="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon" x:Class="BindingReiview.MainWindow"
Title="MainWindow" Height="320" Width="396">
<StackPanel Height="266" VerticalAlignment="Top" Margin="0,0,2,0">
<DataGrid ItemsSource="{Binding}" Name="gridSignals" CanUserAddRows="False" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header=" Room " Binding="{Binding Name}" Width="110"/>
<DataGridTemplateColumn Header=" Tables " Width="100" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding PrpTables, Mode=TwoWay}" SelectedIndex="0" SelectedItem="{Binding PrpSelectedTable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name" Name="cmbVal" ></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header=" Geust(s)" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding ComboValue}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
ObservableCollection привязан к источнику данных сетки. Комбинированные предметы привязаны к Room, где есть ObservableCollection. При выборе таблицы Количество гостей отображается в текстовом поле. Поскольку текст Textbox привязан к ComboValue (Combobox.SelectedItem).
Итак, мне нужно изменить гостей выбранной таблицы. Например (на рисунке), в таблице № 5 значение равно 8, и его необходимо изменить, редактируя текстовое поле.
Любая помощь и предложения приветствуются!
Я хочу изменить выбранное значение таблицы в коллекции. Например, значение t25 изменено на 0, после чего я изменил значение t22 на 10. Затем, когда t25 выбран, 0 должно появиться в текстовом поле. Но в этом случае он этого не делает. – drW