Sam*_*Sam 8 c# wpf binding dependency-properties
我有一个包含DependencyProperty(MyProperty)的WPF UserControl.
DependencyProperty绑定到DataContext中的Property.
现在在UserControl中我想更改bound属性的值.但是,如果我指定MyProperty = NewValueBinding丢失并替换为NewValue.
我想要实现的是更改DependencyProperty绑定的DataContext属性.
我如何实现这一点而不是改变绑定?
澄清:使用类似MyTextBox.Text = "0";我将释放绑定的东西.如何设置Text,保持绑定完整,因此绑定的属性也将更改.
如果没有看到你的代码,我无法判断你做错了什么。下面是一个简单的用户控件,允许用户选择颜色。
<UserControl x:Class="ColorPickerTest.ColorPicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Orientation="Horizontal">
<ToggleButton Name="redButton" Content="Red" Click="Button_Click" />
<ToggleButton Name="yellowButton" Content="Yellow" Click="Button_Click" />
</StackPanel>
</UserControl>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace ColorPickerTest
{
public partial class ColorPicker : UserControl
{
public ColorPicker()
{
InitializeComponent();
}
public Brush SelectedColor
{
get { return (Brush)GetValue(SelectedColorProperty); }
set { SetValue(SelectedColorProperty, value); }
}
public static readonly DependencyProperty SelectedColorProperty =
DependencyProperty.Register("SelectedColor",
typeof(Brush),
typeof(ColorPicker),
new UIPropertyMetadata(Brushes.Transparent, OnPropertyChanged));
private void Button_Click(object sender, RoutedEventArgs e)
{
if (!redButton.IsChecked.GetValueOrDefault() && !yellowButton.IsChecked.GetValueOrDefault())
{
SelectedColor = Brushes.Transparent;
}
else if (!redButton.IsChecked.GetValueOrDefault() && yellowButton.IsChecked.GetValueOrDefault())
{
SelectedColor = Brushes.Yellow;
}
else if (redButton.IsChecked.GetValueOrDefault() && !yellowButton.IsChecked.GetValueOrDefault())
{
SelectedColor = Brushes.Red;
}
else
{
// redButton.IsChecked.GetValueOrDefault() && yellowButton.IsChecked.GetValueOrDefault())
SelectedColor = Brushes.Orange;
}
}
private static void OnPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
ColorPicker colorPicker = sender as ColorPicker;
colorPicker.redButton.IsChecked = colorPicker.SelectedColor == Brushes.Red ||
colorPicker.SelectedColor == Brushes.Orange;
colorPicker.yellowButton.IsChecked = colorPicker.SelectedColor == Brushes.Yellow ||
colorPicker.SelectedColor == Brushes.Orange;
}
}
}
<Window x:Class="ColorPickerTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ColorPickerTest="clr-namespace:ColorPickerTest"
Height="300" Width="300">
<StackPanel>
<ColorPickerTest:ColorPicker SelectedColor="{Binding Path=MyColor, Mode=TwoWay}" />
</StackPanel>
</Window>
using System.Windows;
using System.Windows.Media;
namespace ColorPickerTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
MyColor = Brushes.Red;
DataContext = this;
}
private Brush _myColor;
public Brush MyColor
{
get { return _myColor; }
set
{
_myColor = value;
Background = _myColor;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)