WPF绑定CheckBox IsChecked到ItemsSource DataModel无法查看模型

时间:2017-03-16 13:43:07

标签: wpf checkbox datatemplate

我有一个使用MVVM的WPF表单。在该WPF窗口中,我引用了我的DataContext

DataContext="{x:Static modelView:MasterAutoSyncModelView.Instance}"

MasterAutoSyncModelView包含ObservableCollection

public ObservableCollection<AutoSyncJob> Jobs { get; set; }

在窗口中,我有一个包含作业列表的ListView。工作类看起来像这样:

public sealed class AutoSyncJob : ObservableModel
{
    private string _jobName;
    public string JobName
    {
        get { return _jobName; }
        set
        {
            _jobName = value;
            OnPropertyChanged("JobName");
        }
    }

    private bool _isActive;
    public bool IsActive
    {
        get { return _isActive; }
        set
        {
            _isActive = value;
            OnPropertyChanged("IsActive");
        }
    }
}

列表应检查CheckBox,以查找其IsActive属性设置为true的作业。

<ListView x:Name="lvJobs"
          HorizontalAlignment="Left" VerticalAlignment="Top"
          Height="628" Width="205"
          Margin="30,62,0,0"
          ItemsSource="{Binding Jobs}" 
          SelectedItem="{Binding SelectedJob, Mode=TwoWay}">
  <ListView.View>
    <GridView>
      <GridView.Columns>
        <GridViewColumn Header="Active" Width="50">
          <GridViewColumn.CellTemplate>
            <DataTemplate>
              <CheckBox IsChecked="{Binding IsActive, Mode=TwoWay}"/>
            </DataTemplate>
          </GridViewColumn.CellTemplate>
        </GridViewColumn>

        <GridViewColumn DisplayMemberBinding="{Binding JobName}" Header="Job Name" Width="150">
        </GridViewColumn>
      </GridView.Columns>
    </GridView>
  </ListView.View>
</ListView>

在我的测试代码的构造函数中,我有两个工作。第一个作业将IsActive设置为True。第二个设置为False。

加载窗口时,即使IsActive设置为True,两个CheckBox也都为空。

Visual Studio抱怨无法找到IsActive。它正在查看IsActive属性的视图模型,而不是作业项目源中的作业。

重写代码

<CheckBox IsChecked="{Binding Jobs/IsActive, Mode=TwoWay}"/>

删除此投诉,但该窗口仍未加载选定的CheckBox。

如何将IsChecked属性绑定到从Job ItemsSource绑定到该行的AutoSyncJob上的IsActive布尔值,以便根据底层模型显示已选中或未选中?

第二个问题:检查或取消选中ListView中的活动框不会触发模型设置器中的代码,即使我将模式设置为TwoWay。因此,如果我取消选中或选中该框,我希望模型修改其IsActive属性...但是没有通信。我怀疑这是因为DataTemplate并没有真正绑定到模型项。

2 个答案:

答案 0 :(得分:0)

我试过你的代码,它对我有用。检查DataContex是否设置正确。 我认为你没有你的DataContext,或者它将在稍后设置(在检查绑定之前)。 抱歉我的英文;)

答案 1 :(得分:0)

这可能是编译器问题。暂时离开并回来后看到问题解决了。上面发布了相同的代码(根本没有变化)它只是决定表现。

抱歉浪费时间。