私は簡単な問題を解決して頭を壊しました。私は、埋め込まれたテンプレートプロパティでカスタムコントロールを持っています。テンプレートは内部にTextBoxを持つ単純なグリッドです。このテキストボックスは、setterとgetterを持つシングルトンのproprtyにバインドされています。私はどのようにプログラムで強制的にシングルトンから値を読み取り、それを戻すTextBoxを強制することができますか?言い換えればTemplateControlからデータソースを更新する方法
<Window x:Class="Spike.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="305" Width="521" xmlns:my="clr-namespace:Spike" xmlns:Data="clr-namespace:Spike.Data">
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="editingTemplate">
<Grid>
<TextBox Text="{Binding Source={x:Static Data:MyClass.Instance}, Path=Value2}"/>
</Grid>
</ControlTemplate>
</Grid.Resources>
<UserControl Template="{StaticResource editingTemplate}" HorizontalAlignment="Left" Margin="58,60,0,0" x:Name="myUserControl1" VerticalAlignment="Top" Height="75" Width="284" />
<Button Content="Update source" Height="23" HorizontalAlignment="Left" Margin="184,23,0,0" Name="button1" VerticalAlignment="Top" Width="111" Click="button1_UpdateSource" Focusable="False" />
<Button Content="Update control" Focusable="False" Height="23" HorizontalAlignment="Left" Margin="58,23,0,0" Name="button2" VerticalAlignment="Top" Width="111" Click="button2_UpdateControl" />
</Grid>
</Window>
namespace Spike.Data
{
public class MyClass
{
private static readonly MyClass MyClassInstance = new MyClass();
public MyClass()
{
Value1 = "value1";
Value2 = "value2";
}
public static MyClass Instance
{
get { return MyClassInstance; }
}
public string Value1 { get; set; }
public string Value2 { get; set; }
}
}
button2_UpdateControlとbutton1_UpdateSource方法で実装すべきか?
は、任意のヘルプ
MyClassはINotifyPropertyChangedを実装できますが、これは問題ではありません。しかし、私はどのようにUserControlそのテンプレートについての知らずにバインドされたオブジェクトのTextBoxの更新値を強制することができます理解したい。 – user1113996
UserControlはTextBoxを更新することを強制していません。 TextBoxはイベントにバインドし、それらのイベントに応答します。これがTextBoxの更新です。 UserControlは、TextBoxがバインドされていることを認識しないか、気にしません。別のバインディングコンテキストを持つことができる他のコントロールに(あなたのシナリオでは)コンテナとしての役割を果たすだけです。 –
さて、ユーザーコントロールがいくつかのテンプレートを持つことができるグリッド内のセルであるとします.1つは通常の状態です。 2.データ編集中の別のテンプレート。ユーザーがセルをクリックすると、グリッドがテンプレートを変更します。新しいテンプレートを設定するときに、データオブジェクトから値を取得します。編集コントロールがフォーカスを失ったときに、いくつかのバリデーションプロセスでプロパティーのセッターを呼び出そうとします。フォーカスを失うことなく、このコントロールに変更された値をプログラムで強制的にコミットさせることは可能ですか? – user1113996