Я новичок в WPF, и я пытаюсь создать ObjectDataProvider для создания объекта, а затем использовать его в коде позади. В частности, я хотел бы обновить объект, когда текст вводится в текстовое поле. Вот XAML:Использование ObjectDataProvider для создания объекта
<Window x:Class="bindings.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local ="clr-namespace:bindings"
Title="Bindings" Height="410" Width="1044">
<Window.Resources>
<ObjectDataProvider x:Key ="MyStringData" ObjectType="{x:Type local:MyStrings}" />
</Window.Resources>
<StackPanel>
<TextBox Height="23" Name="textBox1" Width="120" KeyDown="textBox1_KeyDown" />
<ListBox Name="theListBox" Width="200" Height="79"
ItemsSource ="{Binding Source={StaticResource MyStringData}}"/>
</StackPanel>
Вот код позади:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
}
}
}
public class MyStrings : List<String>
{
public MyStrings()
{
this.Add("Test1");
this.Add("Test2");
this.Add("Test3");
this.Add("Test4");
}
}
Мой вопрос: что я могу использовать, чтобы ссылаться на объект, созданный ObjectDataProvider, так что я могу манипулировать экземпляр MyStrings, который он создал. Благодарю.
Новый XAML:
<Window x:Class="bindings.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local ="clr-namespace:bindings"
Title="Bindings" Height="410" Width="1044">
<Window.Resources>
<ObjectDataProvider x:Key ="MyStringData" ObjectType="{x:Type local:MyStrings}" x:Name="myProvider" />
</Window.Resources>
<StackPanel>
<TextBox Height="23" Name="textBox1" Width="120" KeyDown="textBox1_KeyDown" />
<ListBox Name="theListBox" Width="200" Height="79"
ItemsSource ="{Binding Source={StaticResource MyStringData}}"/>
</StackPanel>
Новый код Сзади:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
MyStrings temp = myProvider.ObjectInstance;
}
}
}
public class MyStrings : List<String>
{
public MyStrings()
{
this.Add("Test1");
this.Add("Test2");
this.Add("Test3");
this.Add("Test4");
}
}
Я пробовал это, но VS говорит мне, что я «не могу зарегистрировать дублирующее имя« myProvider »в этой области. Почему это? – BobD
@BobD Можете ли вы обновить код в своем вопросе, чтобы отразить то, что вы меняете (как XAML, так и как код позади), поэтому я могу видеть, что у вас есть. Похоже, вы назвали его в XAML, а затем также объявили его в своем коде. – CodingGorilla
@ Кодирование Gorilla - см. Редактирование - Большое спасибо. – BobD