【发布时间】:2015-04-03 18:06:15
【问题描述】:
我是 WPF 和 MVVM 的新手,并试图遵循这种设计,我创建了一个带有多个用户控件(每个 10 个)的窗口。这些用户控件将保存一个值,该值应该能够由用户输入并发送回数据库。
我遇到的问题是我在画布中实用地创建用户控件,但不知道如何使用这些实例从我的视图模型中设置控件上的值,其中我有一个绑定到保存按钮的 SaveMethod将数据保存到数据库中。感谢您的帮助。
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ClientRatesViewModel viewModel = new ClientRatesViewModel();
DataContext = viewModel;
viewModel.GetChargeUnits();
int previousTopPreRate = 10;
foreach (var rate in viewModel.ClientRatesPreAwr)
{
PreAwr preAwr = new PreAwr();
preAwr.tbPreAwrRate.Text = rate.ClientRatesPreAwr;
PreRatesCanvas.Children.Add(preAwr);
preAwr.Width = 500;
Canvas.SetLeft(preAwr, 10);
Canvas.SetTop(preAwr, previousTopPreRate + 10);
previousTopPreRate += +30;
}
int previousTopPostRate = 10;
foreach (var rate in viewModel.ClientRatesPostAwr)
{
PostAWR postAwr = new PostAWR();
postAwr.tbPostAwrRate.Text = rate.ClientRatesPostAwr;
PostRatesCanvas.Children.Add(postAwr);
postAwr.Width = 500;
Canvas.SetLeft(postAwr, 10);
Canvas.SetTop(postAwr, previousTopPostRate + 10);
previousTopPostRate += +30;
}
}
}
ItemsControl XAML:
<ItemsControl Name="icPreAwr" Margin="10,46,10,10">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding ClientRatesPreAwr }" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
【问题讨论】:
-
删除所有代码并使用正确的 XAML。使用 ItemsControls(或派生控件,例如 ListBoxes)来显示数据项的集合。从这里开始阅读:Data Templating Overview.
-
不。没有。不开开。呜呜呜。以下是如何正确地做到这一点(不是 100% 符合您的问题,但请遵循,您就会明白):stackoverflow.com/a/29132115/1228
-
@Clemens 谢谢,可以将用户控件添加到列表框,还是您的意思是在我的用户控件中创建包含数据的列表框项目?
-
如有必要,您当然可以在 ListBox 的 ItemTemplate 中使用 UserControl。只需将其添加到 DataTemplate 中的元素树即可。