有人对解决我的问题有任何建议吗?我有一个绑定(bind)到ModelCheckoutRecord对象(ListModelCheckoutRecords)集合的datagrid。我将所选项目绑定(bind)到ModelCheckoutRecord(SelectedItemModelCheckoutRecord)。在所选项目的绑定(bind)中,我想更新另一个datagrid和gridsplitter(ResponseVisibility)的可见性绑定(bind)。从其他绑定(bind)更新绑定(bind)的功能似乎不起作用?

我的XAML行如下:

            <Grid>
                <Grid.RowDefinitions>
                    <View:RowDefinitionExtended Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding ListModelCheckoutRecord}" SelectedItem="{Binding SelectedModelCheckoutRecord}" MouseLeftButtonDown="DataGrid_MouseLeftButtonDown" CommandManager.PreviewExecuted="DataGrid_DeletePreviewExecuted" IsReadOnly="False" CanUserAddRows="False" CanUserDeleteRows="True" Margin="15" Grid.Row="0"/>
                <GridSplitter HorizontalAlignment="Stretch" Visibility="{Binding ResponseVisibility}" Grid.Row="1"/>
                <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding ListModelResponseRecord}" SelectedItem="{Binding SelectedModelResponseRecord}" MouseLeftButtonDown="DataGrid_MouseLeftButtonDown" IsReadOnly="False" CanUserAddRows="False" CanUserDeleteRows="False" Visibility="{Binding ResponseVisibility}" Margin="15" Grid.Row="2"/>
            </Grid>

引起我麻烦的精简代码如下:
    private Visibility responseVisibility = Visibility.Visible;
    public Visibility ResponseVisibility
    {
        get { return responseVisibility; }
        set
        {
            if (value == responseVisibility)
            {
                return;
            }

            responseVisibility = value;
            RaisePropertyChanged("ResponseVisibility");
        }
    }

    private List<ModelCheckoutRecord> listModelCheckoutRecord;
    public List<ModelCheckoutRecord> ListModelCheckoutRecord
    {
        get { return listModelCheckoutRecord; }
        set
        {
            if (value == listModelCheckoutRecord)
            {
                return;
            }

            listModelCheckoutRecord = value;
            RaisePropertyChanged("ListModelCheckoutRecord");

            ResponseVisibility = Visibility.Collapsed;
        }
    }

    private ModelCheckoutRecord selectedModelCheckoutRecord;
    public ModelCheckoutRecord SelectedModelCheckoutRecord
    {
        get { return selectedModelCheckoutRecord; }
        set
        {
            if (value == null)
            {
                ResponseVisibility = Visibility.Collapsed;
                return;
            }

            else
            {
                ResponseVisibility = Visibility.Visible;
            }

            if (selectedModelCheckoutRecord == value)
            {
                return;
            }

            RaisePropertyChanged("SelectedModelCheckoutRecord");
        }
    }

谢谢

理查德

最佳答案

假设您真的想只在使用null的情况下具有不可见的可见性,那么实际上就不需要使用代码了。以下XAML可以很好地完成工作。

只需为您的源DataGrid命名(在下面的示例中我将Grid作为名称),然后在目标DataGrid中使用如下样式即可:

<DataGrid x:Name="TargetGridJustToShowWhereThisGoes">
    <DataGrid.Style>
        <Style TargetType="DataGrid">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Grid, Path=SelectedItem}" Value="{x:Null}">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Style>
</DataGrid>

关于c# - 在WPF中使用MVVM从其他绑定(bind)更新绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30804486/

10-12 04:02
查看更多