【问题标题】:WPF Binding CheckBox IsChecked to ItemsSource DataModel Failing to See ModelWPF 将 CheckBox IsChecked 绑定到 ItemsSource DataModel 无法查看模型
【发布时间】:2017-03-16 13:43:06
【问题描述】:

我有一个使用 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");
        }
    }
}

该列表应检查 CheckBoxes 以查找其 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。

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

Visual Studio 抱怨找不到IsActive。它正在查看我的 IsActive 属性的视图模型,而不是 Jobs ItemsSource 中的 Job。

重写代码说

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

删除此投诉,但窗口在加载时仍然没有选中的 CheckBox。

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

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

【问题讨论】:

    标签: wpf checkbox datatemplate


    【解决方案1】:

    我已经尝试了您的代码,它对我有用。检查您的 DataContext 设置是否正确。 我认为你没有你的DataContext,或者稍后会设置它(在检查绑定之前).. 对不起我的英语;)

    【讨论】:

    • 在这里也可以。
    • 数据上下文对除复选框本身之外的所有内容都非常有用。如果它对您有用,您介意发布您的代码吗?我想看看有什么不同。
    • 我所有的同事都在远离我的机器,害怕它接下来会做什么。 (多个同事看到它忽略了该标志并将其留空)它现在可以正常工作,无需更改代码。也许......这是一个构建?我不知道。也许是用圣水驱魔机器。
    【解决方案2】:

    这可能是编译器问题。将其单独放置一会儿,然后回来看到问题自行解决。上面发布的相同代码(根本没有更改)它只是决定表现出来。

    抱歉浪费了时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2019-03-23
      相关资源
      最近更新 更多