我有两列的列表视图。第一列是复选框,第二列是服务器值。我想基本上获得一个列表,列出在单击按钮后该行中具有相应复选框的所有服务器名称。这怎么可能?下面我能够从我的服务器模型成功绑定数据,并在第一列中放置一个复选框,但我被卡住了。
我试图遵循MVVM模式,所以我有一个视图模型类,我理想地想要处理这个逻辑,然后在将检查的服务器名称存储在某个集合中之后传递它。
<ListView ItemsSource="{Binding Servers}" Margin="8,30,10,68">
<ListView.View>
<GridView>
<GridViewColumn Width="90" Header="Select For Sync">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Tag="{Binding ID}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="280" Header="Pad Name"
DisplayMemberBinding="{Binding NodeName}" />
</GridView>
</ListView.View>
</ListView>
答案 0 :(得分:0)
我将简要描述我用于类似事物的方法。
首先,对于自定义类,它看起来应该是这样的:
public class Server
{
public int ID { get; set; }
public bool isChecked { get; set; } //or IsSelected maybe? whichever name you want
public string NodeName { get; set; }
}
对于你的XAML,你可以使用它:
<GridView>
<GridViewColumn Width="90" Header="Select For Sync">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Tag="{Binding ID}" IsChecked="{Binding isChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="280" Header="Pad Name" DisplayMemberBinding="{Binding NodeName}" />
</GridView>
您用于绑定到ListView(Servers
)的集合/列表应该是上面的数据类型Server
。无论何时您需要访问复选框和相应的行,它都很简单:
List<Server> checkedRows = Servers.Where(s => s.isChecked).ToList(); //there, you now have a list of checked rows
或者如果你想要名字
List<string> nodeNames = Servers.Where(s => s.isChecked).Select(s => s.NodeName).ToList();
答案 1 :(得分:0)
您应该将Checked
属性绑定到Unchecked
的布尔属性,而不是处理视图中CheckBox
的{{1}}和IsChecked
事件。 }类型,即Server
T
源集合中的IEnumerable<T>
类型:
Servers
然后,您可以简单地遍历视图模型类中<ListView ItemsSource="{Binding Servers}" Margin="8,30,10,68">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Width="90" Header="Select For Sync">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Tag="{Binding ID}" IsChecked="{Binding IsSelected}"></CheckBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="280" Header="Pad Name" DisplayMemberBinding="{Binding NodeName}" />
</GridView>
</ListView.View>
</ListView>
集合中的记录,并检查属性以确定当前选择的项目:
Servers