我很擔心MVVM數據綁定。將CheckBox的IsChecked屬性綁定到ListView的SelectedItems屬性
在我的例子中,我有一個ListView
填充項目,其中包含一個CheckBox
和一些其他內容。
<ListView
Background="#f0f0f0"
Grid.Row="1"
ItemsSource="{Binding ListViewCollection}"
SelectedItem="{Binding SelectedItem}"
IsSynchronizedWithCurrentItem="True"
BorderThickness="0"
Margin="5">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Tag="{Binding TheValue}" IsChecked="{Binding IsChecked}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding TheText}" Header="#Cell" />
<GridViewColumn DisplayMemberBinding="{Binding TheVoltage}" Header="U[V]" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
的ListView
的ItemSource
被綁定到視圖模型數據類的ObservableCollection
,因爲你在做MVVM。
現在我想將每個列表視圖項的Checkbox.IsChecked
屬性連接到父項ListView.SelectedItems
屬性來觸發它。爲什麼?因爲我想顯示/隱藏一系列數據圖。因此,如果選中第一行中的CheckBox
,則顯示圖1.如果未選中第2行中的CheckBox
,則隱藏圖2等等。例如:
public ListViewItem SelectedItem
{
get { return mSelectedItem; }
set
{
if (mSelectedItem!= value)
{
mSelectedItem= value;
RaisePropertyChanged("SelectedItem");
if (SelectedItem.IsChecked == true)
{
OxyplotModel.Series[1].IsVisible = false;
OxyplotModel.InvalidatePlot(true);
}
}
}
}
要觸發此屬性,必須在GUI中單擊兩次。首先檢查CheckBox
,然後再次點擊該行以觸發並隱藏圖形。但是我想在點擊CheckBox
之後觸發SelectedItems
產權。
現在,我將一個命令綁定到CheckBox
並傳遞一個參數來區分複選框。但正如我所說的,我想使用這個屬性。
這是可能或有更好的想法來解決我的問題?
當你使用綁定時'ListView.SelectedItem'不會是'ListViewItem'類型。這只是一個容器。它將與您收藏中的物品具有相同的類型。因此,如果'ItemsSource'綁定到'List',那麼'ListView.SelectedItem(s)'將給出'MyItemClass',那應該是你綁定屬性的類型 –
dkozl
是的,我知道!但那不是我的問題。 SelectedItem僅在點擊行時觸發,而不在複選框上觸發!我知道我必須將屬性綁定到與ItemSource相同類型的SelectedItem。這對我來說很清楚! –
我知道這不是你的問題,因此只有評論。據我瞭解,你的問題是'ListViewItem'沒有被選中,因爲'CheckBox'獲得焦點。當'CheckBox'被點擊時,你希望ListViewItem被選中嗎? – dkozl