【发布时间】:2017-06-12 07:17:22
【问题描述】:
使用 caliburn.micro 以 MVVM 模式构建 wpf 应用程序。 我需要动态设置按钮的边距属性。 有一个question,我有一些想法,但不适用于 MVVM。
我试过了。
XAML
<Grid>
<Button Content="Test" Margin="{Binding ButtonMargin}"/>
<Grid/>
视图模型
private Thickness _buttonMargin
public Thickness ButtonMargin
{
get { return _buttonMargin; }
set
{
if (_buttonMargin != value)
{
_buttonMargin = value;
NotifyOfPropertyChange(() => ButtonMargin);
}
}
}
//constructor
ButtonMargin = new Thickness(20,10,20,10);
我看不到应用到 Button 的边距。它的默认边距为 0。
这是正确的做法吗?我怎样才能做到这一点?
【问题讨论】:
-
“没有成功”是什么意思?您是否在“输出”窗口中发现任何错误?
-
如果您的
VM中有Thickness,那么我将在此解决方案中质疑您的 MvvM。但是您需要一个Style来处理 Button 中的 Margin 和 VM 上的属性,也许是bool,但这取决于您的要求。 -
为什么要在VM中做呢?边距纯粹与 UI 相关,将其放在 XAML.cs 文件中没有害处。
-
@VimalCK 我的意思是在从不更新其源属性的绑定上设置 Mode=TwoWay 完全没有意义。
-
这样的属性是否应该在视图模型中是一个见仁见智的问题。没有技术上的理由不把它放在那里。但是,将 Mode=TwoWay 设置为非工作绑定的可能解决方案是毫无意义的。
标签: c# wpf mvvm caliburn.micro