Aktualisieren Sie Bindungen von anderen Bindungen mithilfe von MVVM in WPF - c #, wpf, xaml, mvvm, binding

Hat jemand irgendwelche Vorschläge, wie ich mein Problem beheben kann? Ich habe ein Datagrid an eine Sammlung gebunden ModelCheckoutRecord Objekte (ListModelCheckoutRecords). Ich binde den ausgewählten Artikel an a ModelCheckoutRecord (SelectedItemModelCheckoutRecord). In der Bindung für das ausgewählte Element möchte ich die Sichtbarkeitsbindung für ein anderes Datagrid und gridsplitter (ResponseVisibility). Die Fähigkeit, Bindungen von anderen Bindungen zu aktualisieren, scheint nicht zu funktionieren?

Meine XAML-Zeilen dafür sind wie folgt:

            <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>

Der abgespeckte Code, der mir Probleme bereitet, ist wie folgt:

    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");
}
}

Vielen Dank

Richard

Antworten:

2 für die Antwort № 1

Angenommen, Sie möchten wirklich eine reduzierte Sichtbarkeit haben null SelectedItem nur, da ist wirklich keine Notwendigkeit, Code dafür zu verwenden. Das folgende XAML wird die Arbeit gut machen.

Geben Sie einfach Ihrem Quell-DataGrid einen Namen (ich habe im folgenden Beispiel Grid als Name angenommen) und verwende einen Style im Ziel-DataGrid wie folgt:

<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>