में बुलाया जाएगा मैं एक ObservableCollection एक सूची बॉक्स और एक बूलियन संपत्ति एक बटन करने के लिए बाध्य करने के लिए बाध्य है। इसके बाद मैंने परिभाषित किया दो कनवर्टर्स, जो संग्रह पर चलता है और दूसरा बुलियन संपत्ति पर चलता है। जब भी मैं बूलियन संपत्ति को संशोधित करता हूं, कनवर्टर की कनवर्ट करें विधि को कॉल किया जाता है, जहां वही नहीं कहा जाता है यदि मैं अवलोकन संग्रह को संशोधित करता हूं। मैं क्या खो रहा हूँ??जब ValueConverter के Convert विधि WPF
आपके संदर्भ के लिएस्निपेट्स,
XAML snipet,
<Window.Resources>
<local:WrapPanelWidthConverter x:Key="WrapPanelWidthConverter" />
<local:StateToColorConverter x:Key="StateToColorConverter" />
</Window.Resources>
<StackPanel>
<ListBox x:Name="NamesListBox" ItemsSource="{Binding Path=Names}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel x:Name="ItemWrapPanel" Width="500" Background="Gray">
<WrapPanel.RenderTransform>
<TranslateTransform x:Name="WrapPanelTranslatation" X="0" />
</WrapPanel.RenderTransform>
<WrapPanel.Triggers>
<EventTrigger RoutedEvent="WrapPanel.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="WrapPanelTranslatation" Storyboard.TargetProperty="X" To="{Binding Path=Names,Converter={StaticResource WrapPanelWidthConverter}}" From="525" Duration="0:0:2" RepeatBehavior="100" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</WrapPanel.Triggers>
</WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Label Content="{Binding}" Width="50" Background="LightGray" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="{Binding Path=State}" Background="{Binding Path=State, Converter={StaticResource StateToColorConverter}}" Width="100" Height="100" Click="Button_Click" />
</StackPanel>
कोड के पीछे झलकी
public class WrapPanelWidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ObservableCollection<string> aNames = value as ObservableCollection<string>;
return -(aNames.Count * 50);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class StateToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool aState = (bool)value;
if (aState)
return Brushes.Green;
else
return Brushes.Red;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
जब भी एक आइटम संग्रह में जोड़ा जाता है दूसरा बंधन का उपयोग वास्तव में मूल्यों को बदलने के लिए, ObservableCollection सदस्य CollectionModified ला रहा है घटना। जहां कनवर्टर्स तभी शुरू होते हैं जब संपत्ति संशोधित होती है। एक कामकाज के रूप में, कोई संग्रह संशोधित घटना के लिए सदस्यता ले सकता है और फिर संपत्ति परिवर्तनीय घटना को पर्यवेक्षण चयन के नाम के साथ बढ़ा सकता है। – sudarsanyes
अभी आपके उत्तर में आया और मैंने भी इसका अनुमान लगाया। – sudarsanyes
आपका कामकाज काम कर सकता है, लेकिन आपको अवगत होना चाहिए कि यह कामकाज पूरी बाध्यकारी को अपडेट करेगा, यानी संग्रह को नया पढ़ा जाता है और आपके संग्रह में सभी आइटम एक बार फिर से बनाए जाते हैं। कम से कम, मैं यही उम्मीद करता हूं। मैं एक कस्टम 'गणना' संपत्ति के लिए बाध्यकारी की सिफारिश करता हूं, लेकिन यह आपके परिदृश्य पर निर्भर करता है कि यह ओवरहेड के लायक है या नहीं। – gehho