And*_*rke 7 wpf binding dependency-properties mvvm
我最近重写了DevXpress WPF网格,给自己一个SelectedObject属性,我可以从松散绑定的ViewModel访问它.
我已经创建了一个SelectedObject依赖项属性,并在我的XAML中绑定了OneWayToSource.
Everthing工作正常,但如果我尝试将其设为ReadOnly(为了完整性),我会收到编译错误并说我无法绑定到ReadOnly属性.下面的代码编译,我已经包括(但重新列出)我尝试获取属性ReadOnly时尝试的位.
有人可以帮忙吗?
我重写的控件的依赖属性如下所示:
//public static readonly DependencyPropertyKey SelectedRowKey = DependencyProperty.RegisterReadOnly("SelectedObject", typeof(object), typeof(MyGrid), new PropertyMetadata(null));
//public static readonly DependencyProperty SelectedObjectProperty = SelectedRowKey.DependencyProperty;
public readonly static DependencyProperty SelectedObjectProperty = DependencyProperty.Register("SelectedObject", typeof(object), typeof(MyGrid), new PropertyMetadata(null));
public object SelectedObject
{
get
{
return GetValue(SelectedObjectProperty);
}
set
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
XAML是:
<StackPanel>
<devxgrid:MyGrid AutoPopulateColumns="True" DataSource="{Binding Animals}" SelectedObject="{Binding MyObject, Mode=OneWayToSource}" Width="300" Height="300">
<devxgrid:MyGrid.View>
<MyGrid:TableView AllowEditing="False" Name="GridView" AutoWidth="True" />
</devxgrid:MyGrid.View>
</devxgrid:MyGrid>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
SelectedObject
您正在尝试在 XAML 中设置该属性。如果是只读的话,如何设置呢?
编辑:对不起,我的错。刚刚意识到你想要做什么,你是对的,它应该有效。但是,WPF 不支持这种情况,至少在 3.5 中是这样。
编辑 2:刚刚签入 .NET 4 和同样的故事。
顺便说一句,如果您遇到了试图“推送”到虚拟机中的其他人的只读 DP,您可以使用附加行为来解决此问题。例如,假设您希望 VM 了解视图的ActualWidth
和属性。ActualHeight
您可以编写一个SizeWatcherBehavior
附加到FrameworkElement
并侦听大小变化的程序。检测到时,这些大小更改将被推送到 VM 可以绑定到的读/写附加属性:
<Grid local:SizeWatcherBehavior.Watch="True"
local:SizeWatcherBehavior.Width="{Binding WidthOnVM, Mode=OneWayToSource}"
local:SizeWatcherBehavior.Height="{Binding HeightOnVM, Mode=OneWayToSource}"/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6426 次 |
最近记录: |