【发布时间】:2019-11-30 14:42:56
【问题描述】:
我制作了一个由 3 个滑块和一些标签组成的 UserControl。用于操作类的平移、旋转和缩放值。
每个用户控件都有自己的平移、旋转和缩放属性。对应滑块的 Value 绑定到该属性。
这一切都可以正常工作,直到用户尝试通过用鼠标滑动滑块来手动更改值。无论出于何种原因,这都不会更新属性。
这是如何设置其中一个滑块的示例:
<Slider x:Name="sliderTranslation" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" ToolTip="{Binding Value, RelativeSource={RelativeSource Self}}" Value="{Binding Path=Translation}" Thumb.DragCompleted="SliderTranslation_DragCompleted" Maximum="65535" TickFrequency="0" SmallChange="1" AutoToolTipPlacement="TopLeft"/>
这就是我的 DataGrid 的设置方式:
<DataGrid x:Name="dgValueList" Margin="10,72,10,76" SelectionMode="Single" IsReadOnly="True" BorderThickness="2" AlternationCount="2" EnableRowVirtualization="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Face Values" Width="*" CanUserReorder="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:FaceValueSlider/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
所以在某些情况下。 DataGrid 由这些用户控件中的 49 个组成。所以基本上总共有 147 个滑块。
让我们以第一个 UserControl 为例,它具有这些值;
翻译:3380
轮换:49972
规模:16807
如果我将翻译滑块移动到最大值 65535 并保存,我得到的返回值仍然是 3380。但是,如果我通过添加的方法更新它们,它会按预期工作。只有当他们尝试手动滑动时才会这样做。
除此之外,我还收到 51 条与 UserControls 相关的警告,我不知道它们的含义。这是其中的 2 个:
System.Windows.Data 警告:4:无法找到与引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ItemsControl',AncestorLevel='1'' 的绑定源。 BindingExpression:Path=HorizontalContentAlignment;数据项=空;目标元素是'ListBoxItem'(名称='');目标属性是“HorizontalContentAlignment”(类型“HorizontalAlignment”)
System.Windows.Data 警告:4:无法找到与引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ItemsControl',AncestorLevel='1'' 的绑定源。绑定表达式:路径=(0);数据项=空;目标元素是'ListBoxItem'(名称='');目标属性是'ClearTypeHint'(类型'ClearTypeHint'),
我做错了这整个绑定的事情吗?我尝试将 UserControls 添加到列表中,而不是在创建它们并设置 DataGrid 的 ItemsSource 时。
但最终看起来像这样。
【问题讨论】:
-
请提供minimal reproducible example。您正在向我们询问有关 viewmodel 和 XAML 之间的用户控件中的交互,但我们从未见过。 “在创建用户控件时将它们添加到列表中并设置 DataGrid 的 ItemsSource”——我可能会花费接下来的一百万年时间来尝试猜测这对您的实际代码意味着什么,永远不要靠近。
-
抱歉,我不应该急于提出这个问题。我制作了一个重现项目并在 OP 顶部发布了一个链接。希望这足以帮助找出我做错了什么。 :)
标签: c# wpf binding datagrid datatemplate