我有一个使用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并没有真正绑定到模型项。
答案 0 :(得分:0)
我试过你的代码,它对我有用。检查DataContex是否设置正确。 我认为你没有你的DataContext,或者它将在稍后设置(在检查绑定之前)。 抱歉我的英文;)
答案 1 :(得分:0)
这可能是编译器问题。暂时离开并回来后看到问题解决了。上面发布了相同的代码(根本没有变化)它只是决定表现。
抱歉浪费时间。