2017-03-16 101 views
0

我有一個使用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再次沒有真正綁定到模型項目。

回答

0

我試過你的代碼,它適用於我。檢查您的DataContex是否設置正確。 我認爲你還沒有DataContext,或者稍後會設置它(在綁定被選中之前)。 對不起,我的英語;)

+0

也適用於此。 – Shadowed

+0

datacontext對除複選框本身以外的所有內容都很適用。 你介意發佈你的代碼,如果它爲你工作?我想看看有什麼不同。 – auticus

+0

我的所有同事都害怕接下來會做的事情,而離開我的機器。 (多位同事認爲它忽略了國旗並將其留空) 它現在可以正常工作,無需更改代碼。也許......這是一個構建?我不確定。也許是聖水機器的驅魔。 – auticus

0

這可能是一個編譯器問題。暫時擱置一會,然後回來看到問題自行解決。上面發佈的相同代碼(根本沒有變化),它只是決定表現出來。

對不起,浪費時間。