【发布时间】:2011-07-27 13:45:45
【问题描述】:
我创建了一个用户控件,我团队的其他成员只需将它放在他们的视图上,然后他们就可以动态地创建按钮的 ObservrableCollection 并绑定到它(一个功能区栏,但根据我们的需要高度定制),它处理位置,样式等。它工作得很好,完全符合我们项目的需要,但是它只在初始加载时工作,我做了一些挖掘并意识到这是因为我在 FrameWorkMetaData 中只有一个 PropertyChangedCallback 并且我没有设置CoerceValueCallback 的回调,所以我进行了一些挖掘并设置了一个,但我不确定该怎么做 - 我想这是问题所在,CoerceValueCallback 的方法签名让它返回一个对象,我只想更新我的按钮当列表发生变化时。忽略这个返回值是否安全?也许一些代码可能会有所帮助 -
这是我的 PropertyChangedCallback - 当他们第一次分配按钮列表时被触发
public static void ButtonListUpdated(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
int count = 0;
var grid = (source as RibbonBarUserControl).ButtonsGrid;
var buttons = e.NewValue as ObservableCollection<Button>;
if (buttons != null)
{
grid.Children.Clear();
foreach (RibbonButton b in buttons)
{
b.Margin = new Thickness(1);
b.Style = (Style)grid.FindResource("ribbonButtonStyle");
ColumnDefinition c = new ColumnDefinition();
grid.ColumnDefinitions.Add(c);
grid.Children.Add(b);
Grid.SetRow(b, 0);
Grid.SetColumn(b, count);
count = ++count;
}
}
}
这里不是 CoerceValueCallback
public static object OnButtonListModified(DependencyObject sender, Object baseValue)
{
//What to do here? Can I essentially ignore the returned object and basically
//copy what I am doing in ButtonListUpdated?
return baseValue;
}
我在网上看到了一些示例,它们更简单 - 比如如果生日小于结婚年份生日 = 结婚年份,当然这有点不同 - 我正在创建按钮并更新我的控件的 UI。
好的 - 感谢您的任何建议!
【问题讨论】:
标签: c# wpf dependency-properties