从 Avalonia 中的 ItemsControl 按钮绑定到 MainViewModel 命令

问题描述 投票:0回答:3

我正在尝试从 Avalonia 中的 ItemsControl 按钮创建 ReactiveUI MVVM 绑定 在 WPF 中,这将通过 Freezable BindingProxy 完成。不过,Freezable 似乎在 Avalonia 中不可用。应该如何创建这样的绑定?

            <ItemsControl Items="{Binding MyQueue}">
              <ItemsControl.ItemTemplate>
                <DataTemplate>
                  <Button Content="My Button"
                          HorizontalAlignment="Center" VerticalAlignment="Center"
                          CommandParameter="{Binding}"
                          Command="{Binding MySpecialCmd}"/>
                </DataTemplate>
              </ItemsControl.ItemTemplate>
            </ItemsControl>

参考资料:
https://stackoverflow.com/questions/22073740/binding-visibility-for-datagridcolumn-in-wpf\ https://thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

c# mvvm reactiveui avaloniaui
3个回答
5
投票

非常感谢 AvaloniaUI gitter 上的 @maxkatz6。 解决办法如下:

{Binding $parent[ItemsControl].DataContext.MySpecialCmd}
           <ItemsControl Items="{Binding MyQueue}">
              <ItemsControl.ItemTemplate>
                <DataTemplate>
                  <Button Content="My Button"
                          HorizontalAlignment="Center" VerticalAlignment="Center"
                          CommandParameter="{Binding}"
                          Command="{Binding $parent[ItemsControl].DataContext.MySpecialCmd}"/>
                </DataTemplate>
              </ItemsControl.ItemTemplate>
            </ItemsControl>

0
投票

在 Avalonia 11.0.0 版本中需要 off

CompileBinding
参数。

x:CompileBindings="False"


0
投票

对于那些尝试过 @AndyPrince 的答案但收到此类错误的人

无法解析类型上名称为“MySpecialCmd”的属性或方法 '系统.对象'

这是由于编译后的绑定无法知道数据上下文的真实类型造成的。 但是,有一个解决方法:通过强制转换:

Command="{Binding $parent[ItemsControl].((vm:MyViewModel)DataContext).MySpecialCmd}"
© www.soinside.com 2019 - 2024. All rights reserved.