Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 1 год назад.
Необходимо динамически добавлять юзер контролы. Подскажите возможно ли реализовать привязку самого грида, а если нет, то подайте идею как это можно реализовать.
<Grid x:Name="Screen" Grid.Row="1" Grid.ColumnSpan="4" Margin="20"></Grid>
List<int> mass = new List<int>();
List<Label> numbs = new List<Label>();
private void GenerateNumb(object sender, RoutedEventArgs e)
{
Random rnd = new Random();
Screen.Children.Clear();
mass = new List<int>();
if (numberstring.Text.Length==0)
{
return;
}
int c = Convert.ToInt32(numberstring.Text);
for (int i=0;i<c; i++)
{
mass.Add(rnd.Next());
ColumnDefinition c1 = new ColumnDefinition();
Screen.ColumnDefinitions.Add(c1);
numbs.Add(new Label());
Screen.Children.Add(numbs[i]);
Grid.SetColumn(numbs[i], i);
numbs[i].Content = mass[i];
}
}
Немного другой код
<ItemsControl ItemsSource="{Binding Buttons}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3" Rows="3"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop ="")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
public List<ButtonViewModel> _Buttons { get; set; } = new List<ButtonViewModel>();
public List<ButtonViewModel> Buttons
{
get
{
return _Buttons;
}
set
{
_Buttons = value;
OnPropertyChanged();
}
}
public class ButtonViewModel
{
public string Text
{
get;
set;
}
public ICommand Command { get; set; }
public ButtonViewModel(string text)
{
Text = text;
}
}
public MainWindowViewModel()
{
Buttons.Add(new ButtonViewModel("1"));
Buttons.Add(new ButtonViewModel("2"));
Buttons.Add(new ButtonViewModel("3"));
Task.Factory.StartNew(() =>
{
while (true)
{
Task.Delay(1000).Wait();
var Mytmp= Buttons[1];
Buttons[1] = Buttons[0];
Buttons[0] = Mytmp;
}
});
}
}
Как-то так это делается.
Верстку каждого элемента коллекции через ItemTemplate
, а контрол, который будет служить контейнером - через ItemsPanelTemplate
задается, можно использовать любую разновидность панели. То что вы ищете - это возможно UniformGrid
(ссылка).
<ItemsControl ItemsSource="{Binding MyCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<local:MyControl Text="{Binding ...}" .../>
<Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemControl>
У меня есть native c++ dll, есть с++/cli враппер для нее (назовем эту длл-ку adaptordll)
Изначально моя программа принимала на вход CSV файл сохранённый в Unicode и нормально считывала с него данные, но пришлось перейти на Excel и вот...
Есть метод для изменения размера картинкиКак сделать чтобы он перезаписывал файл