我有一个类型DataGrid
为ObservableCollection
的类型Tennant
(请打拼,请最终解决)ItemsSource
。该Tennant
班由一个名称,电子邮件,电话号码,和职业的了。但是,在DataGrid中,我在程序中有一组所有的Tennant,仅包含其名称,一个复选框以显示它们是否在Property
被编辑的当前环境中生活或曾经生活过,以及一个单选按钮,用于显示当前是否正在编辑。当前Tennant
的Property
。这是一个屏幕截图:
我的问题在“住这里”一栏。这不绑定到Tennant
或Property
类的任何部分。相反,它具有两个事件(“已检查”和“未检查”),这些事件实际上将其添加到“当前属性”中。这是其中之一。另一个几乎相同,只是将其删除而不是添加。(加上我做了我自己的,DataGridColumnTemplate
因为CheckBox没有这些事件...)
private void livedHereCheck_Checked(object sender, RoutedEventArgs e)
{
CheckBox chkd = (sender as CheckBox);
Tennant cur = (chkd.DataContext as Tennant);
CurrentProperty.addTennant(cur);
}
这样就行了(尽管我肯定可以肯定有一种更好的方法)。真正的问题出现在我第一次打开窗口时,我需要设置一些此处已设置的Live CheckBox,因为它们已经在CurrentProperty.tennants
Property中(请注意,它是小写字母。仍然会引起wpf和c#标准的困扰等等。)
目前我有这个:
private void Window_Initialized(object sender, EventArgs e)
{
var iSource = tennantsGrid.ItemsSource;
foreach (Tennant cur in iSource)
{
var row = tennantsGrid.ItemContainerGenerator.ContainerFromItem(cur);
if (row != null)
{
if (CurrentProperty.hasTennant(cur))
{
// Something here... Not sure yet how to actually check the box but that goes here.
}
}
}
}
这就是我需要帮助的地方。我该如何在窗口初始化时执行此操作,还是最好在其他地方执行此操作以避免混淆?有没有更好的方式来做我正在尝试的一切?您是否需要其他代码来帮助回答?谢谢!
因此,我们将更多地使用WPF方法
从定义转换器类开始
class HasTennantConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Tennant tennant = values[0] as Tennant;
Property property = values[1] as Property;
return property.hasTennant(tennant);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后在您的XAML中将此转换器添加到您的资源中
<l:HasTennantConverter x:Key="HasTennantConverter"/>
并将其绑定到“样式”或“模板”行中的CheckBox
我已使用Window作为检索SourceProperty的相对源,您可以选择适当的绑定来检索CurrentProperty。
<CheckBox>
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource HasTennantConverter}" Mode="OneWay">
<Binding />
<Binding Path="DataContext.CurrentProperty" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Window}"/>
</MultiBinding>
</CheckBox.IsChecked>
</CheckBox>
此互斥会将Tennant和CurrentProperty发送到转换器,并且将在转换器中检查逻辑,并根据您的逻辑将返回true或false,该逻辑将选中或取消选中CheckBox。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句