我创建了一个警告窗口,用于验证用户的删除操作,使用Window.ShowDialog并设置DialogResult。一切正常,但警告文本没有出现在TextBlock
中,我不知道为什么。这是我的Window
:
<Window x:Class="RoVCo.Windows.VerifyWindow"
....
WindowStyle="None" Padding="10" ResizeMode="NoResize">
<StackPanel>
<TextBlock Height="Auto" Text="{Binding TBText, Mode=OneWay}" Foreground="Yellow" TextWrapping="Wrap" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,0,0">
<Button Content="Cancel" Margin="10,0" Width="50" Click="CancelVerify" />
<Button Content="OK" Width="50" Click="ConfirmVerify" />
</StackPanel>
</StackPanel>
</Window>
上课:
public partial class VerifyWindow : Window
{
public VerifyWindow(string content)
{
InitializeComponent();
_text = content;
}
private string _text = "";
public string TBText { get { return _text; } }
private void CancelVerify(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
this.Close();
}
private void ConfirmVerify(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
this.Close();
}
}
我称之为:
var window = new RoVCo.Windows.VerifyWindow("Removing this skill will erase all DP spent on it from all levels. Continue?");
if (window.ShowDialog() == false) return;
答案 0 :(得分:0)
为了使用绑定,您需要将local属性设置为public,以及通知属性或依赖属性。
答案 1 :(得分:0)
您可以尝试此解决方案。
将您的VerifyWindow构造函数更改为:
public VerifyWindow() { 的InitializeComponent(); }
并删除TBText和_text代码。
创建一个名为VerifyViewModel的新类
公共类VerifyViewModel:INotifyPropertyChanged { public VerifyViewModel(字符串内容) { this.TBText = content; }
public string TBText { get; private set; }
#region INPC code - can create an abstract base view model class and put this there instead
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}
#endregion
}
请按以下方式调用此代码
var viewmodel = 新的VerifyViewModel(“删除此技能将清除所有级别上花费的所有DP。继续吗?”);
var window = new VerifyWindow
{
DataContext = viewmodel
};
if (window.ShowDialog() == false) return;
答案 2 :(得分:0)
如果您在Dialog
中使用的只是一个属性我认为使用DependancyProperty
将是更好的选择,那么添加所有INotifyPropertyChanged
逻辑
public partial class VerifyWindow : Window
{
public VerifyWindow(string content)
{
InitializeComponent();
TBText = content;
}
public static readonly DependencyProperty TBTextProperty =
DependencyProperty.Register("TBText", typeof(string), typeof(VerifyWindow), new UIPropertyMetadata(string.Empty));
public string TBText
{
get { return (string)GetValue(TBTextProperty); }
set { SetValue(TBTextProperty, value); }
}
private void CancelVerify(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
this.Close();
}
private void ConfirmVerify(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
this.Close();
}
}