Я работаю над проектом WPF. Я создаю usercontrol, содержащий выпадающий список; которые представляют логическое значение (True или false). И я регистрирую DependencyProperty
Value
для моего usercontrol.
Всякий раз, когда выбор в выпадающем списке был изменен, я буду обновлять свойство Value
, а также при обновлении свойства Value
я буду обновлять выпадающий список.
Но я обнаружил проблему, когда использую свой usercontrol в MVVM. Я связываю свойство Value
со своим свойством IsEnable
в моей модели представления. Я установил режим привязки как TwoWay
привязка. Но когда я изменил выделение в comboBox, свойство IsEnable
никогда не устанавливается.
Мой пользовательский контроль:
public bool Value
{
get { return (bool)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(bool),
typeof(BooleanComboBox),
new UIPropertyMetadata(true, OnValuePropertyChanged));
private void Cmb_Selection_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cmb = sender as ComboBox;
object selectedValue = cmb.SelectedValue;
if (selectedValue == null)
{
this.Value = false;
}
else
{
if (selectedValue.GetType() == typeof(bool))
{
this.Value = (bool)selectedValue;
}
else
{
this.Value = false;
}
}
if (this.OnValueChange != null)
this.OnValueChange(this, this.Value);
}
private static void OnValuePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
BooleanComboBox self = sender as BooleanComboBox;
self.Cmb_Selection.SelectedValue = (bool)args.NewValue;
}
В окне, где я размещаю свой usercontrol (я уже установил для контекста данных usercontrol мой viewModel):
<tibsExtControl:BooleanComboBox Grid.Row="4"
Grid.Column="1"
VerticalAlignment="Center"
Value="{Binding Path=NewTemporaryZone.IsEnable,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
x:Name="Cmb_AllowNonLBILogon"/>
В моем классе моделей я объявляю свойство IsEnable
:
private bool _isEnable;
public bool IsEnable
{
get { return _isEnable; }
set
{
_isEnable= value;
OnPropertyChanged("IsEnable");
}
}
Что происходит с моим контролем пользователя. Я что то пропустил? Пожалуйста, помогите мне. T.T