【发布时间】:2016-01-22 23:07:27
【问题描述】:
我想访问绑定到视图模型中的文本框的依赖属性。 在视图模型中,我有以下代码:
Answer _Answer = new Answer();
_Answer.GetValue(Answer.Deutsch1AnswerProperty);
Console.WriteLine(_Answer.Deutsch1Answer);
依赖属性定义如下:
public class Answer : DependencyObject
{
// Ereignis
public event EventHandler Deutsch1AnswerChanged;
public static readonly DependencyProperty Deutsch1AnswerProperty;
public String Deutsch1Answer
{
get { return (String)GetValue(Deutsch1AnswerProperty); }
set { SetValue(Deutsch1AnswerProperty, value); }
}
public static void OnDeutsch1AnswerChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
Answer _Answer = (Answer)sender;
if (_Answer.Deutsch1AnswerChanged != null)
_Answer.Deutsch1AnswerChanged(_Answer, null);
}
static Answer()
{
FrameworkPropertyMetadata meta = new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault);
meta.PropertyChangedCallback = new PropertyChangedCallback(OnDeutsch1AnswerChanged);
Deutsch1AnswerProperty = DependencyProperty.Register("Deutsch1Answer", typeof(String), typeof(Answer), meta);
}
}
在 MainWindow.Xaml 我有以下代码:
<Window.Resources>
<local:Answer x:Key="_Answer" Deutsch1Answer=string.Empty />
</Window.Resources>
<Grid Definitions ...>
<TextBox Grid.Column="1" Grid.Row="2" Name="BoxDeutsch1" Text="{Binding Source={StaticResource _Answer}, Path=Deutsch1Answer}">
</TextBox>
我无法访问视图模型中的文本属性。请帮忙。
视图模型如下所示:
public class VokabelViewModel : INotifyPropertyChanged
{
private Vokabel _Model;
public VokabelViewModel(Vokabel model)
{
_Model = model;
}
private ICommand _boxDeutsch1_HitEnter;
public ICommand BoxDeutsch1_HitEnter
{
get
{
return _boxDeutsch1_HitEnter ?? (_boxDeutsch1_HitEnter = new CommandHandler(() => MyActionBoxDeutsch1_HitEnter(), _canExecuteBoxDeutsch1_HitEnter));
}
}
private bool _canExecuteBoxDeutsch1_HitEnter;
public void MyActionBoxDeutsch1_HitEnter()
{
Answer _Answer = new Answer();
_Answer.GetValue(Answer.Deutsch1AnswerProperty);
_Model.TestVokabel(_Answer.Deutsch1Answer);
}
【问题讨论】:
-
您在 XAML 中有一个带有空 Deutsch1Answer 的资源,这就是绑定到您的 TextBox 的内容。我看不到您在哪里将 DataContext 设置为您在最顶部所做的“new Answer()”。您可能只想要其中一个。
-
我的 DataContext 设置为我的 ViewModel。如何将 DataContext 设置为 new Answer()? this.DataContext = _VokabelViewModel;
-
如果您想在 XAML 中设置 DataContext,请在此处查看前 2 个答案:stackoverflow.com/questions/4590446/…。我个人更喜欢在代码中设置它,但是:stackoverflow.com/questions/5824600/…
-
谢谢 - 但我仍然没有解决我的问题的方法。我已将代码中的 DataContext 设置为我的视图模型。类答案与我的视图模型是分开的,因为它需要是一个依赖对象。我还在上面发布了我的视图模型的一部分。
-
试试这个。 1. 在 XAML 中的
<Window>中定义一个 xmlns。例如<Window ... xmlns:ViewModels="clr-namespace:NAMESPACE.TO.ANSWER.VIEWMODEL" ...>2. 替换<Window.Resources>为<Window.DataContext><ViewModels:Answer /></Window.DataContext>
标签: c# wpf data-binding