C# 绑定源不';设置从代码隐藏文件的绑定时不会更改
因此,我有一个程序,我主要使用C# 绑定源不';设置从代码隐藏文件的绑定时不会更改,c#,xaml,uwp,win-universal-app,C#,Xaml,Uwp,Win Universal App,因此,我有一个程序,我主要使用x:Bind进行所有绑定,但我有一个控制页面,需要在其中生成大量滑块,以便能够操作存储在可观察集合中的数据 我真的需要从我的代码中生成这些滑块,因为我需要大约100个滑块,手工创建它们会把我的xmal文件搞得一团糟 这就是我在代码中创建绑定的方式。当我第一次加载它们时,它们也可以工作。但当我移动滑块时,它们不会更改源数据 private void CreateGrid() { for (var parameterNumberIndex = 1; parame
x:Bind
进行所有绑定,但我有一个控制页面,需要在其中生成大量滑块
,以便能够操作存储在可观察集合中的数据
我真的需要从我的代码中生成这些滑块,因为我需要大约100个滑块,手工创建它们会把我的xmal文件搞得一团糟
这就是我在代码中创建绑定的方式。当我第一次加载它们时,它们也可以工作。但当我移动滑块时,它们不会更改源数据
private void CreateGrid()
{
for (var parameterNumberIndex = 1; parameterNumberIndex < 97; parameterNumberIndex++)
{
var paraName = new TextBlock()
{
Name = $"Parameter{parameterNumberIndex}",
FontSize = 25,
VerticalAlignment = VerticalAlignment.Top,
Margin = new Thickness(0, 0, 0, 10)
};
var slider = new Slider()
{
Name = $"ValueSlider{parameterNumberIndex}",
Width = 200,
VerticalAlignment = VerticalAlignment.Center,
HorizontalAlignment = HorizontalAlignment.Center
};
var value = new TextBox()
{
Name = $"ValueBox{parameterNumberIndex}",
Margin = new Thickness(10, 5, 0, 0),
FontSize = 20,
VerticalAlignment = VerticalAlignment.Top
};
var row = new RowDefinition { Height = new GridLength(50, GridUnitType.Pixel) };
SettingsGrid.RowDefinitions.Add(row);
var nameBinding = new Binding
{
Source = ViewModel.BlockCollection.NamesBlock.Names[parameterNumberIndex].NameString,
Mode = BindingMode.OneWay
};
var valueBinding = new Binding()
{
Source = ViewModel.BlockCollection.ParameterBlock.Parameters[parameterNumberIndex].ParameterValue,
Mode = BindingMode.TwoWay
};
var minBinding = new Binding()
{
Source = ViewModel.BlockCollection.MinMaxBlock.AllValues[parameterNumberIndex].MinValue,
Mode = BindingMode.OneWay
};
var maxBinding = new Binding()
{
Source = ViewModel.BlockCollection.MinMaxBlock.AllValues[parameterNumberIndex].MaxValue,
Mode = BindingMode.OneWay
};
var textBinding = new Binding()
{
Path = new PropertyPath("Value"),
Source = slider,
Mode = BindingMode.TwoWay
};
BindingOperations.SetBinding(paraName, TextBlock.TextProperty, nameBinding);
BindingOperations.SetBinding(slider, Slider.MinimumProperty, minBinding);
BindingOperations.SetBinding(slider, Slider.MaximumProperty, maxBinding);
BindingOperations.SetBinding(slider, Slider.ValueProperty, valueBinding);
BindingOperations.SetBinding(value, TextBox.TextProperty, textBinding);
SettingsGrid.Children.Add(paraName);
SettingsGrid.Children.Add(slider);
SettingsGrid.Children.Add(value);
Grid.SetColumn(paraName, 0);
Grid.SetColumn(slider, 1);
Grid.SetColumn(value, 2);
Grid.SetRow(paraName, parameterNumberIndex - 1);
Grid.SetRow(slider, parameterNumberIndex - 1);
Grid.SetRow(value, parameterNumberIndex - 1);
}
}
这几乎是我完成这个项目之前需要解决的最后一步,我不想被困在这里:/
我不知道wpf标签是否有误。但是每次我查找xaml引用时,我都会在wpf的东西上绊倒,它在某种程度上是可用的。因此,如果它是错误的,告诉我,我删除它
再解释一下。。。在成品中,它将取决于我接收到的数据,以决定是否有滑块或文本框
这是我昨天提出的另一个问题的一个小例子:
我看到您正在
网格中添加控件,手动生成行。虽然这当然可以工作,但最好使用列表控件并在以下范围内创建项:
<ItemsControl ItemsSource="{x:Bind Data}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- your Sliders, etc. -->
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl>
如果数据在多个布局之间可能不同,您可以实现一个DataTemplateSelector
类,覆盖SelectTemplateCore(对象项,DependencyObject容器)
(具体地说,这个方法是另一个名称相同但参数数量不同的方法,它没有被调用)并为每个项目确定正确的模板。您可以使用x:Key
创建多个DataTemplates
作为资源,然后从DataTemplateSelector
中引用它们。有关示例和更多详细信息,请参见此。我看到您正在网格中添加控件,手动生成行。虽然这当然可以工作,但最好使用列表控件并在以下范围内创建项:
<ItemsControl ItemsSource="{x:Bind Data}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- your Sliders, etc. -->
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl>
如果数据在多个布局之间可能不同,您可以实现一个DataTemplateSelector
类,覆盖SelectTemplateCore(对象项,DependencyObject容器)
(具体地说,这个方法是另一个名称相同但参数数量不同的方法,它没有被调用)并为每个项目确定正确的模板。您可以使用x:Key
创建多个DataTemplates
作为资源,然后从DataTemplateSelector
中引用它们。有关示例和更多详细信息,请参见此。“我需要大约100个”听起来像应该在ItemsControl中。它不仅仅是滑块。先这样测试比较容易。根据输入的数据,我可能还需要一个文本框或一个切换开关。我对ItemsControl不是很熟悉,但它在这种情况下可用吗?还是仅当我只有一种特定类型的元素时才可用?如果不将ItemsControl的ItemTemplate设置为固定的DataTemplate(如答案所示),则可以为不同的项类型显示不同的DataTemplate。源项集合可能声明为ObservableCollection
。然后只需将带有DataType属性的DataTemplates声明为资源。从这里开始阅读:“‘我需要大约100个’听起来好像它们应该在ItemsControl中,而不仅仅是滑块。先这样测试比较容易。根据输入的数据,我可能还需要一个文本框或一个切换开关。我对ItemsControl不是很熟悉,但它在这种情况下可用吗?还是仅当我只有一种特定类型的元素时才可用?如果不将ItemsControl的ItemTemplate设置为固定的DataTemplate(如答案所示),则可以为不同的项类型显示不同的DataTemplate。源项集合可能声明为ObservableCollection
。然后只需将带有DataType属性的DataTemplates声明为资源。从这里开始阅读:。这绝对比我的方法好:D我在使绑定工作时遇到了一些问题,我仍然必须实现DataTemplateSelector
,但到目前为止,我确实对它有多好印象:D这绝对比我的方法好:D我在使绑定工作时遇到了一些问题,我仍然必须实现DataTemplateSelector
,但到目前为止,我对它的性能印象深刻:D