gpt4 book ai didi

使用 MVVM 的 WPF 只读依赖属性

转载 作者:行者123 更新时间:2023-12-04 11:45:44 25 4
gpt4 key购买 nike

我最近重写了 DevXpress WPF 网格,为自己提供了一个可以从松散绑定(bind)的 ViewModel 访问的 SelectedObject 属性。

我创建了一个 SelectedObject 依赖属性,并在我的 XAML 中绑定(bind)了 OneWayToSource。

Everthing 工作正常,但如果我尝试将其设为 ReadOnly(为了完整性),我会收到编译错误并说我无法绑定(bind)到 ReadOnly 属性。下面的代码编译,我已经包含(但rem'd out)我在尝试获取属性 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();
}
}

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>

最佳答案

您正在尝试设置 SelectedObject XAML 中的属性。如果它是只读的,如何设置它?

编辑:对不起,我的错。刚刚意识到你正在尝试做什么,你是对的,它应该工作。但是,WPF 至少在 3.5 中不支持这种情况。

编辑 2:刚刚 checkin .NET 4 和相同的故事。

顺便说一句,如果你被其他人的只读 DP 卡住了,而你正试图将它“推送”到 VM 中,你可以使用附加的行为来解决这个问题。例如,假设您希望您的 VM 知道 ActualWidthActualHeight您的 View 的属性。你可以写一个SizeWatcherBehavior附加到 FrameworkElement并监听大小变化。检测到时,这些大小更改将推送到您的 VM 可以绑定(bind)到的读/写附加属性:

<Grid local:SizeWatcherBehavior.Watch="True"
local:SizeWatcherBehavior.Width="{Binding WidthOnVM, Mode=OneWayToSource}"
local:SizeWatcherBehavior.Height="{Binding HeightOnVM, Mode=OneWayToSource}"/>

关于使用 MVVM 的 WPF 只读依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com