をお勧めしますあなたが保存したり、ロードしたり(シンプルで簡単なxamlシリアル化でビルド)、そしてそれをUIにバインドすることができる文字を表します。理想的には、表示を扱うビュー、ビューをサポートするすべてのプロパティとメソッドを持つViewModel、およびデータ自体を表すモデルがあります。あなたには不慣れかもしれませんが(既に慣れていない限り)、そうでない場合は、MVVMパターンであり、WPFの業界標準です。単にバインドするオブジェクトを持つことは、 "ショートカット"バージョンです。
public class Character : INotifyPropertyChanged
{
private int age = 20;
public int Age
{
get { return age; }
set
{
if (age != value)
{
age = value;
NotifyPropertyChanged("Age");
}
}
}
private string name = "Default Name";
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
NotifyPropertyChanged("Name");
}
}
}
private ObservableCollection<Spells> spells = new ObservableCollection<Spells>();
public ObservableCollection<Spells> Spells
{
get { return spells; }
set
{
if (spells != value)
{
spells = value;
NotifyPropertyChanged("Spells");
}
}
}
...
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
しばらく時間がかかりますか?はい。あなたははるかに使いやすく、拡張可能であることを意味するでしょうか?はい。メモ帳に書くだけで簡単に入力するのが好きなので、このエクササイズをやっているなら、大丈夫です。
最終的にスクリーン上に物を表示する以外の機能を追加したい場合(特に「検索」や呪文や能力のフィルタリング、統計情報を適切に調整する「疲れ」などの特定の効果を適用する)プログラミング/ソフトウェア開発についてもっと学びたい場合は、余計な努力を惜しみなく入れてください。
本当にあなたが書き込むことができるスキンを作ることに興味があるだけで、そこに保存/読み込み私が働くかもしれないと思う方法。
あなたのすべてのUIコンポーネントに「NameTextBox」などの名前を付けると、リフレクションを使用してそれらをループし、タイプに応じて情報を格納および取得できます。例えば
:
<StackPanel Margin="20">
<TextBox x:Name="AgeTextBox"/>
<TextBox x:Name="NameTextBox"/>
<TextBox x:Name="Notes"/>
<Button Content="Save" Click="Button_Click"/>
</StackPanel>
私は、すべてのテキストボックスを検索し、一般的な方法で、その内容を私がやりたいことができます。これは、単にコンソールに出力しますが、テキストファイル、CSVまたはXMLに保存することができます:
var fields = typeof(MainWindow).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
foreach (FieldInfo FI in fields)
{
if (FI.FieldType == typeof(TextBox))
{
TextBox value = FI.GetValue(this) as TextBox;
Console.WriteLine(FI.Name + ":" + value.Text);
}
}
が生成されます
AgeTextBox:23
NameTextBox:Bob Bobson
Notes:Is a very nice Character
、同様のが逆に行うことができます。
出典
2016-08-11 11:20:11
Joe
OOPの使い方の良い提案:オブジェクトの使用... :)答えを改善するために、モデルオブジェクトに直接バインディングするのではなく、ViewModelを使用することをお勧めします。次に、モデルをViewModelに渡すことができます(VMのプロパティを設定してください)。必要に応じてそのモデルのプロパティを更新します。そうすれば、「保存」をクリックしたときにキャラクターの詳細を保存する方法を設定することができます。それ以外の場合は、テキストボックスでプロパティを直接更新するだけです(つまり、ウィンドウを閉じて保存しないと、 dに変更されました) –
はい、答えにフルMVVMを使用するかどうかはわかりませんでした。単にオブジェクトをあまりにも多く持っているかもしれないと感じている人には少し難しいかもしれません。私はそれを編集してオプションとして追加しますが、あまり詳しく説明しません。 – Joe
私はそれが潜在的には少し難しいことに同意します。しかし、彼らが言うように "あなたが行くことを意味するように始めて..." *(誰でも)*。問題を解決する*正しい方法であると考えていることを示唆することには害はありません(同時に、潜在的に将来の深刻な問題も同時に起こります)。私はかつて、あなたがdownvoteの前に私の答えを考えているようなものだったので、答えた人の哲学を読んでいました:私はOPに答えようとしているのですか、または将来の問題/質問を防ぐより深刻な問題を解決しようとしています私はパラフレーズ、明らかに):) –