डब्ल्यूपीएफ - सी #, डब्ल्यूपीएफ, एक्सएएमएल, एमवीवीएम, बाइंडिंग में एमवीवीएम का उपयोग करके अन्य बाइंडिंग से बाइंडिंग अपडेट करें

क्या किसी को मेरी समस्या को ठीक करने के बारे में कोई सुझाव है ?? मेरे पास एक डाटाग्रिड है जो संग्रह के लिए बाध्य है ModelCheckoutRecord वस्तुओं (ListModelCheckoutRecords)। मैं चयनित आइटम को बाध्य कर रहा हूं ModelCheckoutRecord (SelectedItemModelCheckoutRecord)। चयनित आइटम के लिए बाध्यकारी में मैं एक और डेटाग्रिड और ग्रिडप्लिटर के लिए बाध्यकारी दृश्यता अपडेट करना चाहता हूं (ResponseVisibility)। किसी अन्य बाइंडिंग से बाइंडिंग अपडेट करने की क्षमता काम नहीं कर रही है?

इसके लिए मेरी एक्सएएमएल लाइनें निम्नानुसार हैं:

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

धन्यवाद

रिचर्ड

उत्तर:

जवाब के लिए 2 № 1

मान लीजिए कि आप वास्तव में एक संक्षिप्त दृश्यता चाहते हैं null SelectedItem केवल, इसके लिए कोड का उपयोग करने की ज़रूरत नहीं है। निम्नलिखित एक्सएएमएल नौकरी ठीक करेगी।

बस अपना स्रोत डेटाग्रिड एक नाम दें (मैंने ग्रिड को निम्नलिखित उदाहरण में नाम के रूप में माना है) और इस तरह लक्षित डेटाग्रिड में एक शैली का उपयोग करें:

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

संबंधित सवाल
सबसे लोकप्रिय