我有一個使用MVVM的WPF表單。在這一WPF窗口我有我的DataContext
參考:WPF綁定CheckBox被檢查到ItemsSource DataModel未能看到模型
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");
}
}
}
名單應該有檢查,有它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,兩個複選框也是空的。
Visual Studio抱怨IsActive
無法找到。它正在查看IsActive
屬性的視圖模型,而不是來自Jobs ItemsSource的Job。
重寫代碼說
<CheckBox IsChecked="{Binding Jobs/IsActive, Mode=TwoWay}"/>
刪除此投訴,但窗口仍然有負荷沒有選擇複選框。
如何將IsChecked
屬性綁定到與Jobs ItemsSource綁定到該行的AutoSyncJob上的IsActive
布爾值,以便根據基礎模型顯示已選中還是取消選中?
第二個問題:檢查或取消選中ListView中的活動框不會觸發模型設置程序中的代碼,即使將模式設置爲TwoWay。因此,如果我取消選中或選中該框,我希望該模型的IsActive
屬性被修改......但沒有通信。我懷疑這是因爲DataTemplate再次沒有真正綁定到模型項目。
也適用於此。 – Shadowed
datacontext對除複選框本身以外的所有內容都很適用。 你介意發佈你的代碼,如果它爲你工作?我想看看有什麼不同。 – auticus
我的所有同事都害怕接下來會做的事情,而離開我的機器。 (多位同事認爲它忽略了國旗並將其留空) 它現在可以正常工作,無需更改代碼。也許......這是一個構建?我不確定。也許是聖水機器的驅魔。 – auticus