2011-01-18 11 views
5

मैंने अपने कोड का एक सरलीकृत संस्करण बनाया है जो एक ही समस्या का अनुभव करता है। मुद्दा यह है कि मुझे यकीन नहीं है कि मॉडल में बदलते समय मेरे कस्टम नियंत्रण में निर्भरता संपत्ति क्यों अपडेट नहीं हो रही है।कस्टम नियंत्रण में निर्भरता संपत्ति बाध्यकारी और अद्यतन

मॉडल:

public class MainWindowModel : INotifyPropertyChanged 
{ 
    private bool isChecked; 
    public bool IsChecked { get { return isChecked; } set { isChecked = value; OnPropertyChanged("IsChecked"); } } 

    public event PropertyChangedEventHandler PropertyChanged; 
    void OnPropertyChanged(string prop) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
    } 
} 

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:custom="clr-namespace:WpfApplication1" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <custom:CustomTextbox x:Name="TextboxName" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" TextChanged="CustomTextbox_TextChanged"> 
     <custom:CustomTextbox.CustomTextboxItems> 
      <custom:CustomTextboxItem IsChecked="{Binding IsChecked}" /> 
     </custom:CustomTextbox.CustomTextboxItems> 
    </custom:CustomTextbox> 

    <Button Content="Do It" Click="Button_Click" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,20" /> 
</Grid> 
</Window> 

कोड के पीछे:

public partial class MainWindow : Window 
{ 
    MainWindowModel model; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     model = new MainWindowModel(); 
     this.DataContext = model; 
    } 

    private void CustomTextbox_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     model.IsChecked = true; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     if (TextboxName.CustomTextboxItems[0].IsChecked) 
     { 
      TextboxName.Text = "Property successfully changed"; 
     } 
    } 
} 

कस्टम नियंत्रण:

public class CustomTextbox : TextBox 
{ 
    public CustomTextbox() 
    { 
     CustomTextboxItems = new ObservableCollection<CustomTextboxItem>(); 
    } 

    public ObservableCollection<CustomTextboxItem> CustomTextboxItems { get; set; } 
} 

public class CustomTextboxItem : FrameworkElement 
{ 
    public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(CustomTextboxItem), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

    public bool IsChecked 
    { 
     get { return (bool)GetValue(IsCheckedProperty); } 

     set { SetValue(IsCheckedProperty, value); } 
    } 
} 

जैसा कि आप कस्टम नियंत्रण में देख सकते हैं, मेरे पास उन वस्तुओं का संग्रह है जिनमें निर्भरता गुणों वाले ऑब्जेक्ट हैं जिन्हें मैं बांधना चाहता हूं। तो मैं xaml में ऑब्जेक्ट्स बनाता हूं और बाध्यकारी सेटअप करता हूं, लेकिन जब मैं मॉडल में बाध्य संपत्ति को अद्यतन करता हूं, तो यह इसे कस्टम नियंत्रण में नहीं बदलता है। कोई विचार?

उत्तर

5

विजुअल स्टूडियो आउटपुट विंडो में बाध्यकारी त्रुटियों की तलाश करें। मुझे लगता है कि आपको कुछ पता चल जाएगा कि चेक बॉक्स पर बाध्यकारी असफल रहा है।

आपके CustomTextBox नियंत्रण में CustomTextBoxItem ऑब्जेक्ट्स का संग्रह है, जिसके विरुद्ध आप बाध्यकारी सेट कर रहे हैं। हालांकि, किसी भी समय आप उन वस्तुओं को तार्किक पेड़ में जोड़ रहे हैं। तार्किक पेड़ में उन वस्तुओं को जोड़ने के तरीके को देखने के लिए मेरी पोस्ट here पढ़ें।

+0

बहुत बहुत धन्यवाद! – gamzu07

+0

वह लिंक मर चुका है, कृपया इसे @ kentboogaart अपडेट करें –

संबंधित मुद्दे