我正在嘗試在使用 C# 的小型 WPF 專案中使用 MVVM 原則。我有一個ListBox填充CheckBox了通過系結回 ViewModel 創建的 es。我還有一個系結到CheckBoxes的命令,并希望將CheckBoxesContent作為CommandParameter. 我正在尋找這樣的東西:
<Binding ElementName="" Path="Content"/>
不幸的是,因為CheckBoxes 是通過系結創建的,所以我沒有元素名稱。
ListBox/的代碼ListBoxItem Style是這樣的:
<Style x:Key="CheckBoxListStyle" TargetType="{x:Type ListBox}">
<Setter Property="SelectionMode" Value="Multiple"></Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<CheckBox Command="{Binding SelectedItemCommand, Mode=OneWay, Source={StaticResource comd}}">
<CheckBox.CommandParameter>
<MultiBinding Converter="{StaticResource cv}">
<Binding ElementName="" Path="Content"/>
<Binding ElementName="" Path="IsChecked"/>
</MultiBinding>
</CheckBox.CommandParameter>
<ContentPresenter></ContentPresenter>
</CheckBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
它的實作是:
<ListBox Grid.Row="1" Style="{StaticResource CheckBoxListStyle}" Name="lstProducts" ItemsSource="{Binding stampInfo, Mode=OneWay, Source={StaticResource vmStamp}}"
DisplayMemberPath="Country" >
</ListBox>
最終我的目標是能夠Content在文本框中顯示所有選定專案的文本(在這種情況下為國家),每個國家都用逗號分隔。我目前唯一缺少的是Country.
uj5u.com熱心網友回復:
當您確實希望以不同方式顯示資料項時,不要創建ControlTemplatefor ,而是使用 a ,這正是它的目的。請參閱資料模板概述。ListBoxItemDataTemplate
洗掉DisplayMemberPath從ListBox,因為你不能同時使用使用的路徑和自定義DataTemplate在同一時間。如果沒有DataTemplate,您只會設定此路徑,但您想指定要顯示的具體屬性或屬性路徑。
<ListBox Grid.Row="1"
Style="{StaticResource CheckBoxListStyle}" Name="lstProducts"
ItemsSource="{Binding stampInfo, Mode=OneWay, Source={StaticResource vmStamp}}"/>
將 替換ControlTemplate為DataTemplateas ItemTemplate。然后將Content和系結CommandParameter到屬性Country。資料背景關系會自動設定為系結的資料項集合中的相應項。該IsChecked屬性可以使用 a 系結RelativeSource,它是CheckBox本身。
<Style x:Key="CheckBoxListStyle" TargetType="{x:Type ListBox}">
<Setter Property="SelectionMode" Value="Multiple"></Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2" />
</Style>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<CheckBox Content="{Binding Country}"
Command="{Binding SelectedItemCommand, Mode=OneWay, Source={StaticResource comd}}">
<CheckBox.CommandParameter>
<MultiBinding Converter="{StaticResource cv}">
<Binding Path="Country"/>
<Binding Path="IsChecked" RelativeSource="{RelativeSource Self}"/>
</MultiBinding>
</CheckBox.CommandParameter>
</CheckBox>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
另一種選擇是創建具有可系結到 的IsChecked屬性的屬性的資料項CheckBox。然后,您可以在資料項的設定器中執行操作,或者執行例如執行命令的按鈕單擊,該命令在您的視圖模型中過濾已檢查項的系結集合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382131.html
