不确定它有多重要,但我正在使用devexpress网格并为其中一列定义一个celltemplate。问题是,当我使用“slidercontrol”进行绑定时,它可以工作,但是当我绑定到我自己创建的UserControl时,绑定不起作用。 UserControl绑定正确...我在代码中的其他地方使用它。它只是在这种情况下不起作用,我想知道为什么?感谢。
此绑定有效:
<dxg:GridColumn FieldName="SetupRating" Header="Setup Rating" AllowFocus="True" AllowEditing="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<Slider Value="{Binding RowData.Row.SetupRating}" Minimum="0" Maximum="3" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
此绑定不起作用:
<dxg:GridColumn FieldName="SetupRating" Header="Setup Rating" AllowFocus="True" AllowEditing="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<wpf:RatingControl RatingValue="{Binding RowData.Row.SetupRating}" MaxRating="3" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
编辑:请不要建议wpf:RatingControl是破坏的。这是一个经过验证的用户控制,它可以在许多其他数据中使用,这可能会影响到SCENARIOS。如果有任何错误的信息,那么它只会影响我在这个DATATEMPLATE中绑定的方式。谢谢。
以下是我在评级控件中定义依赖项属性的方法:
public static readonly DependencyProperty RatingValueProperty =
DependencyProperty.Register("RatingValue", typeof(int), typeof(RatingControl),
new FrameworkPropertyMetadata(0,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
RatingValueChanged));
public int RatingValue
{
get
{
return AdjustRatingValue((int)GetValue(RatingValueProperty), MaxRating);
}
set
{
SetValue(RatingValueProperty, AdjustRatingValue(value, MaxRating));
}
}
private static int AdjustRatingValue(int value, int maxValue)
{
if (value < 0)
return 0;
else if (value > maxValue)
return maxValue;
else
return value;
}
private static void RatingValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
RatingControl parent = sender as RatingControl;
int numberOfButtonsToHighlight = AdjustRatingValue((int)e.NewValue, parent.MaxRating);
SelectStars(numberOfButtonsToHighlight, parent.StarValues);
}
答案 0 :(得分:2)
您必须使用RelativeSource来查找父元素,类似这样的
<dxg:GridColumn FieldName="SetupRating" Header="Setup Rating" AllowFocus="True" AllowEditing="True">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<wpf:RatingControl RatingValue="{Binding DataContext.RowData.Row.SetupRating, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dxg:GridColumn}}}" MaxRating="3" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
答案 1 :(得分:1)
根据您的上次更新,我猜是因为Slider默认为双向绑定而您的用户控件没有。尝试将Mode = TwoWay添加到绑定中:
<wpf:RatingControl RatingValue="{Binding RowData.Row.SetupRating, Mode=TwoWay}" MaxRating="3" />