gam*_*u07 5 c# wpf xaml dependency-properties custom-controls
我创建了一个经历相同问题的代码的简化版本.问题是我不确定为什么我的自定义控件中的依赖属性在模型中被更改时不会更新.
模型:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
代码背后:
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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
定制控制:
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); }
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在自定义控件中看到的,我有一组项目,其中包含具有我想要绑定的依赖项属性的对象.所以我在xaml中创建对象并设置绑定,但是当我更新模型中的binded属性时,它不会在自定义控件中更改它.有任何想法吗?