6

因为我需要在类之间拆分一些功能,所以我遇到了以下情况

xml代码

<CheckBox IsChecked="{Binding MyObjectField.MyBoolean}"  />

查看模型

...
public MyInternalObject MyObjectField;
...

MyObject 类

public class MyInternalObject {
    ...
    public bool MyBoolean { get; set; }
    ...
}

除非我在 View Model 类中复制 MyBoolean 属性,否则它不起作用。

public bool MyBoolean 
{ 
    get { return MyInternalObject.MyBoolean; }
    set { MyInternalObject.MyBoolean=value; }
}

有人有想法吗?

4

3 回答 3

6

您还不能(在 WPF 4.5 版中,您可以绑定到静态属性)。但是您可以在 App.xaml.cs 中创建您的属性

public partial class App : Application
{
    public bool MyBoolean { get; set; }
}

并从各处绑定。

<CheckBox IsChecked="{Binding MyBoolean, Source={x:Static Application.Current}}">
于 2012-07-24T16:39:57.270 回答
5

不,你不能。因为绑定系统使用反射来查找

DataContext 中的属性(即您的虚拟机)

它不寻找字段。我希望这将有所帮助。

于 2012-07-24T16:26:11.207 回答
0

我没有将元素绑定到字段的属性,而是将元素的 DataContext 更改为所需的字段。

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        MainWindowView mainWindowView = new MainWindowView();
        var mainWindowViewModel = new MainWindowViewModel();
        mainWindowView.DataContext = mainWindowViewModel;
        mainWindowView.pagerView.DataContext = mainWindowViewModel.pager;
        mainWindowView.Show();
    }

在此示例中,我在其下方有一个 DataGrid 和 Pager(第一页、上一页、下一页、最后一页)。MainWindowView 的元素(包括 DataGrid)绑定到 MainWindowViewModel 中的属性,但分页器按钮绑定到 mainWindowViewModel.pager 的属性。

主窗口视图:

    <DataGrid Name="dgSimple" ItemsSource="{Binding DisplayedUsers}" MaxWidth="200" Grid.Row="0" SelectedItem="{Binding SelectedRow}"></DataGrid>
    <view:PagerView x:Name="pagerView" Grid.Row="2"/>

寻呼机视图:

<UserControl x:Class="wpf_scroll.View.PagerView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:wpf_scroll.View"
         mc:Ignorable="d" 
         d:DesignHeight="30" d:DesignWidth="350">
<StackPanel Orientation="Horizontal" Grid.Row="1">
    <Label Content="Page size:"/>
    <TextBox Text="{Binding PageSize}" Width="30" VerticalContentAlignment="Center"
                 HorizontalContentAlignment="Center"></TextBox>
    <Button Content="First" Command="{Binding FirstPageCommand}"></Button>
于 2018-03-13T17:47:41.610 回答