[英]WPF : binding DataGrid outside the list
<Grid Background="white" Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Label Content="Physical Test" Margin="0,0,0,0" FontSize="12" FontWeight="DemiBold"
HorizontalAlignment="Left" VerticalAlignment="Top" />
<ComboBox Height="22" Margin="90,0,0,0"
HorizontalAlignment="Left" VerticalAlignment="Top"
ItemsSource="{Binding physicalTestList, Mode=OneWay}" SelectedItem="{Binding selectedPhysicalTest}"
DisplayMemberPath="physicalTestName" SelectedValuePath="physicalTestID"/>
<Button Content="Refresh"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="200,0,0,0" Width="70" Height="22"
Command="{Binding buttonRefresh}" IsEnabled="{Binding RefreshEnable, Mode=OneWay}"/>
<CheckBox Margin="300,5,0,0" HorizontalAlignment="Left"
Content="Confirmed?"
IsChecked="{Binding IsConfirmed, Mode=OneWay}"
Command="{Binding buttonConfirm}" IsEnabled="{Binding ConfirmEnable, Mode=OneWay}"
/>
<Grid>
<DataGrid x:Name="theGrid" IsVisibleChanged="OnIsVisibleChanged"
Margin="0,30,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
AutoGenerateColumns="False" CanUserAddRows="False" IsReadOnly="False"
ItemsSource="{Binding theList, Mode=OneWay}"
>
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Navy"/>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="SteelBlue"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Well" Binding="{Binding well}" IsReadOnly="True" />
<DataGridTextColumn Header="Control" Binding="{Binding controlName}" IsReadOnly="True" />
<DataGridTextColumn Header="Type" Binding="{Binding display}" IsReadOnly="True" />
<DataGridTemplateColumn Header="Value" IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding processedValue }"
Background="{Binding valueColor}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Min" Binding="{Binding minDisplay }" IsReadOnly="True" />
<DataGridTextColumn Header="Max" Binding="{Binding maxDisplay }" IsReadOnly="True" />
<DataGridCheckBoxColumn Header="Omit For SPC?" Binding="{Binding isOutlier}" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
我有 Checkbox 对象的属性 IsChecked 正确,使用以下
IsChecked="{Binding IsConfirmed, Mode=OneWay}"
在 DataGrid“theGrid”中,如果 IsConfirmed = true,我想让最后一列的 ReadOnly 属性为 TRUE。 所以基本上我希望该列的行为就像 DataGrid 之外的复选框一样。
此时我有
<DataGridCheckBoxColumn Header="Omit For SPC?" Binding="{Binding isOutlier}" IsReadOnly="True" />
我试图将其更改为
<DataGridCheckBoxColumn Header="Omit For SPC?" Binding="{Binding isOutlier}" IsReadOnly="{Binding IsConfirmed, Mode=OneWay}" />
但没有用。
任何指针将不胜感激!
在这种情况下,您应该在binding
中使用RelativeSource 。
例如:
<DataGridCheckBoxColumn Header="Omit For SPC?" Binding="{Binding isOutlier}" IsReadOnly="{Binding IsConfirmed, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type typeOfAncestor}} Mode=OneWay}" />
其中typeOfAncestor
是在其DataContext
模型中具有IsConfirmed
属性的控件类型。
它没有用。 这就是我现在所拥有的。
<DataGridCheckBoxColumn Header="Omit For SPC?" Binding="{Binding isOutlier}"
IsReadOnly="{Binding IsConfirmed
, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type CheckBox}}
, Mode=OneWay
}" />
固定的。
您必须添加绑定对象
<DataGrid>
<DataGrid.Resources>
<util:BindingProxy x:Key="proxy" Data="{Binding}" />
</DataGrid.Resources>
那么这就是您使用“代理”引用的方式
<DataGridCheckBoxColumn Header="Omit For SPC?" Binding="{Binding isOutlier}"
IsReadOnly="{Binding Data.IsConfirmed, Source={StaticResource proxy} }" />
请注意,您必须使用“数据”。 而不是“数据上下文”。 然后你需要创建那个“<util:”前缀
xmlns:util="clr-namespace:PCRPlating.util"
以下是“BindingProxy”类
public class BindingProxy : Freezable
{
#region Overrides of Freezable
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
#endregion
public object Data
{
get { return (object)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
// Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.